使用aidl通信,跨应用通信并实时回调
使用aidl通信
A应用
- 创建两个aidl, ICarInfoManager,ICallback
- ICarInfoManager中写一个监听的方法, 如:void registerCallback(ICallback callback);
- ICallback中写回调方法,如:void notifyData(int type, String state);
- 创建一个service,如Test,绑定ICarInfoManager。
callback可以调用回调方法给B应用。
例: - 生成包含aidl的jar包
B应用
- 导入A应用生成的jar包。
- 启动service。如:
- 写carInfoConn。
如: 此处连接的service就是Test,而Test返回的对象就是IBinder就可以获得ICarInfoManager对象。
此时再去注册callback。 - 此处踩坑重点,一定要创建 新类继承ICallback
如果在registerCallback时,直接如下写,在A应用那边会显示callback为空。
原因是此时重写了asBinder(),而默认返回null。 - 正确写法 如下
继承类后,不需要重写asBinder(),此时debug看,A应用callback不为空,回调会返回到B应用。
android.mk编译A应用jar包
-
aidl文件 新建一个module,和app文件夹平级。
java和aidl的内部文件夹名称一致,如都为com.cn.bdd,后面分别创建java文件或aidl文件。
-
module下的build.gradle。应如下:
-
module下的manifest的包名不能和app下manifest的包名一致,其他不用写。
-
使用as自带右侧gradle中module->other->package-aidl-jar脚本,编译出jar包,生成在app/libs目录下。
(若脚本不存在,请改变你gradle版本,一般是gradle低了) -
mmm编译apk,修改以下内容,会把module中aidl打入apk中。