AIDL是Android接口定义语言的意思,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service的功能。
### 实现方法 ###
例:用 A程序去访问 B程序的MyService.java服务1. 在B中建立AIDL文件MyAidlService.AIDL,在AIDL文件里写我们的接口方法
2. 在MyService中写AIDL文件定义的方法的具体服务逻辑
3. 在B的manifest文件中,为Service添加action "com.liu.servicetest.MyAidlService" 用于A静态来访问Service
(这里是因为,如果用动态Intent (this, MyService.class), 在A中没有MyService这个类)
4. 把B的AIDL文件夹拷贝到A中,一定要注意包的路径依然为B中的路径
5.在A中利用静态Intent来启动B的服务MyService
对应步骤详细代码:
1. MyAidlService.AIDL
interface MyAidlService {
int plus(int a, int b);
}
2. MyService.java
public class MyService extends Service{
MyAidlService.Stub mBinder = new MyAidlService.Stub() {
@Override
public int plus(int a, int b) throws RemoteException {
return a + b;
}
};
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
}
3.添加action
<service android:name=".MyService">
<intent-filter>
<action android:name="com.liu.servicetest.MyAidlService"/>
</intent-filter>
</service>
4.拷贝AIDL文件夹
5.A访问B的服务
Intent intent = new Intent("com.liu.servicetest.MyAidlService");
bindService(intent, connection, BIND_AUTO_CREATE);
private MyAidlService aidlService;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d("onServiceConnected", "jinlaile");
aidlService = (MyAidlService) MyAidlService.Stub.asInterface(service);
try {
int plus = aidlService.plus(100, 50);//对100和50相加
Log.d("onServiceConnected", plus + "");
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
这就是整个流程
看结果:
注意:
AS和Eclipse建立AIDL文件的方法不一样,详情请看Android Stdio建立AIDL文件