AIDL 写法
2015-11-25 18:47
519 查看
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异常。
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异常。
相关文章推荐
- main函数的参数传递
- 载入OpenSSL的动态库——学会使用tryToLoadOpenSslWin32Library和QPair
- SharePoint 2013 Error - File names can't contain the following characters: & " ? < > # {} % ~ / \.
- Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别
- mybaits 多个参数传入用#{0,1,....}或者@Param注释
- 获取子进程终止状态:wait和waitpid
- ATL创建COM组件时找不到dllmain入口函数
- 深度分析WM_PAINT和WM_ERASEBKGND消息
- Lock&Condition实现线程同步通信
- codeforces-242A-Heads or Tails【暴力】
- ORA-01994: GRANT failed: password file missing or disabled
- 关于Installation error: INSTALL_FAILED_NO_MATCHING_ABIS的解决方法
- AIR 移动设备上的存储控制
- git中报unable to auto-detect email address 错误的解决拌办法
- 人脸检测“A Fast and Accurate Unconstrained Face Detector”
- 查找(一)史上最简单清晰的红黑树讲解 http://blog.csdn.net/yang_yulei/article/details/26066409
- paint和paintComponent方法的关系
- POJ1273 HDU1532 Drainage Ditches
- sizeof与offsetof有关的结构体详解 http://blog.csdn.net/callinglove/article/details/46534883
- 二叉树学习之二叉查找树 http://blog.csdn.net/callinglove/article/details/40707449