服务端步骤:java
一、新建一个包 在包里新建一个接口MyServiceAIDL(接口名本身取)android
代码app
//接口前面不要有public 等 否则会报错 interface MyServiceAIDL { //这个接口内的方法能够本身根据业务需求本身添加相应的方法 //这里简单建一个getData方法 //方法名前面不要有public 等否则会报错 String getData(); }
二、建无缺接口须要到找到你新建的接口类,工程保存路径:右击工程-->properties-->右边有个Location位置
根据该位置找到本身刚刚新建的接口类,而后把后缀名改成.aidl 在回到本身工程刷新一下ide
三、在建一个类继承Servicethis
代码spa
public class MyService extends Service { @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return new MyBindService(); } @Override public boolean onUnbind(Intent intent) { // TODO Auto-generated method stub return super.onUnbind(intent); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } //AIDL --> 要继承Stub 而不是Binder //而后还要在配置清单里添加服务(隐式意图) class MyBindService extends Stub{ @Override public String getData() throws RemoteException { // TODO Auto-generated method stub return "(跨进程)服务端返回来的消息"; } } }
四、在配置清单里注册建立的服务code
代码xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.service.aidl" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- android:exported="true"表示能够跨进程访问 android:enabled="true"表示激活 action 表示客户端要访问在这里的服务的路径action --> <service android:name=".MyService" android:enabled="true" android:exported="true"> <intent-filter > <action android:name="com.examp.remote.service.MyService"/> </intent-filter> </service> </application> </manifest>
========================================================对象
服务端写好后写客户端继承
客户端步骤:
一、把服务端新建的接口连同包一块儿拷贝到客户端的源文件(src)下
二、MainActivity.java类
代码
public class MainActivity extends Activity { private TextView text_info; private MyServiceAIDL myServiceAIDL;//声明本身建的接口对象 private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub } @Override public void onServiceConnected(ComponentName name, IBinder binder) { //经过Stub.asInterface方法把IBinder返回来的对象转换而后赋值给MyServiceAIDL接口声明的对象 myServiceAIDL = Stub.asInterface(binder); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.text_info = (TextView) this.findViewById(R.id.textview); bindMyService();//绑定服务 } private void bindMyService() { Intent intent = new Intent(); //经过隐式意图来绑定服务 intent.setAction("com.examp.remote.service.MyService"); bindService(intent, connection, Context.BIND_AUTO_CREATE); } //按钮的事件监听 public void bindRemoteService(View view){ try { //这里经过本身建立的接口对象来获取服务端的数据 text_info.setText(myServiceAIDL.getData()); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
效果图示例: