A应用——提供服务
1. 新建New —File ——.aidl文件
2. aidl文件中定义interface,,在gen文件夹下能看到相应的java类
3. 定义Service 自定义binder类 extends aidl.Stub 实现接口方法
实现onBind()方法,返回binder
4. manifest中注册Service(隐式启动)
B应用——调用服务
- 相同包名 aidl文件
定义ServiceConnection implements ServiceConnection,实现onServiceConnected方法(系统调用这个来传送在service的onBind()中返回的IBinder)
private IBook bookQuery;
private final class BookConnection implements ServiceConnection{@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
bookQuery = IBook.Stub.asInterface(service);
}@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
}- 绑定service
bindService(service, ServiceConnection , BIND_AUTO_CREATE); - 使用bookQuery 的方法
在进行两个project通信时,应该有以下几点注意:
1.在activity project中引入service project中aidl文件。注意引入后的aidl文件包名应该和service中aidl文件包名保持一致。
2.service project中manifest文件中,service 注册时要声明 android:process=”:remote”
action应该是aidl中接口的包名.接口名。
3.activity bindService中一个serviceconnection对象对应的是一个service,否则会报java.lang.SecurityException: Binder invocation to an incorrect interface异常。