android aidl实现2个应用通信
服务端和客户端gradle(app)都要配置
点击查看代码
android {
buildFeatures {
//aidl客户端和服务端都要配置
aidl=true
}
}
1.服务端
aidl接口代码如下
点击查看代码
package com.example.myserverpro;
//服务端提供接口 写完一定要记得Sync一下,用于生成IRemoteAidl.Stub()
interface IRemoteAidl {
int add(int a,int b);
String getMsg(String str);
}
服务端实现接口,代码如下
点击查看代码
package com.example.myserverpro
import android.app.Service
import android.content.Intent
import android.os.IBinder
class RemoteAidlService: Service() {
//实现Stub
val binder=object :IRemoteAidl.Stub(){
override fun add(a: Int,b: Int): Int {
return a+b
}
override fun getMsg(str:String): String {
return "我是服务段,收到:"+str
}
}
override fun onBind(p0: Intent?): IBinder? {
return binder
}
}
下面是服务端的清单文件
点击查看代码
<application>
<service
android:name=".RemoteAidlService"
android:enabled="true"
android:exported="true"><!--//允许外部应用绑定-->
<intent-filter>
<!-- action自定义的 用于客户端绑定 -->
<action android:name="com.example.myserverpro.RemoteAidlService"/><!--外部 通过action来绑定 -->
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</service>
</application>
2.客户端
aidl接口代码如下
点击查看代码
package com.example.myserverpro;
//服务端提供接口 写完一定要记得Sync一下,用于生成IRemoteAidl.Stub()
interface IRemoteAidl {
int add(int a,int b);
String getMsg(String str);
}
客户端MainActivity类
点击查看代码
var remoteAidl: IRemoteAidl?=null
val con=object : ServiceConnection {
override fun onServiceConnected(
p0: ComponentName?,
p1: IBinder?
) {
//拿到代理
remoteAidl= IRemoteAidl.Stub.asInterface(p1)
var value=remoteAidl?.add(1,2)
var str=remoteAidl?.getMsg("客户端发送")
Log.v("****","绑定成功 返回值:${value} ${str}")
}
override fun onServiceDisconnected(p0: ComponentName?) {
remoteAidl= null
Log.v("****","断开")
}
}
fun bindRemoteService(){
//action是服务端的注册文件对应action
val intent= Intent("com.example.myserverpro.RemoteAidlService")
//服务端的包名
intent.setPackage("com.example.myserverpro")
bindService(intent,con,BIND_AUTO_CREATE)
}
override fun onCreate(savedInstanceState: Bundle?) {
...
bindRemoteService()
}
override fun onDestroy() {
super.onDestroy()
//解绑
if (remoteAidl!=null){
unbindService(con)
}
}
客户端清单文件 注意安卓 11+的,要加queries标签
点击查看代码
<application> </application>
<!-- queries 是在 application外的-->
<queries>
<!-- 写服务端包名 -->
<package android:name="com.example.myserverpro" />
</queries>
测试流程
1.先运行服务apk,再运行客户端apk,然后看LOG输出。

浙公网安备 33010602011771号