Android 使用Aidl 一个app绑定或启动另一个app的服务并获取服务里的数据
**
Android 使用Aidl 一个app绑定或启动另一个app的服务并获取服务里的数据
**
最近有网友问我,Android 里使用Aidl 怎么让一个app绑定或启动另一个app的服务并获取服务里的数据。我当时想这个涉及的东西好深哟,Android系统的进程通信了,很复杂的东西了。问我会不会做?这个需求我没有遇到过更没做过,我当时想,我曾经做过一个app调用另一个app contentProvider里的数据,service,contentprovider都是Android的四大组件,又都是在一个手机里,基于我对Android系统的理解,我就告诉他,应该是可以的,毕竟Service里还有一个Binder 对象啊,可以和系统交互的。为了验证这一理论分析,我做一个demo。
1、需要新建两个app,假设是客户端app和服务端app。
客户端app
新建一个MyService,注册时要注意action的赋值。
在MyService里创建一个Binder类,先新建一个.aidl类。
在工程的main文件夹里新建一个aidl文件夹,然后再aidl文件夹里新建一个IMyAidlInterface.aidl类。
创建完aidl后要build工程
IMyAidlInterface.Stub 返回一个Binder,在onBind方法里将这个binder传给绑定者。
到这里客户端app的工作就结束了,上一张完整截图
服务端app
将客户端app的aidl文件夹复制到服务端app里的main文件夹里
然后app文件夹里的build.gradle里添加aidl.srcDirs=[‘src/main/aidl’],然后build一下工程,这个和客户端操作一样。
接下在MainActivity里添加两个Button,一个是绑定服务,一个是获取数据。
绑定时action要和MyService 注册时的action一致,Intent要有显示的。
到这里服务端app的工作也完成了
2、将两个app运行到手机上,测试是否可以绑定和获取数据。
先点击绑定服务按钮,客户端app的打印执行了onCreat和onBind,说明MyService被绑定了,点击获取数据按钮,服务端app打印获取到的数据;客户端app打印了onDestory,解绑成功。
启动服务就更简单了,这套代码稍作调整就可以了,不做演示了。
测试成功!
如果需要代码,加我QQ:792686722