先上git的地址
前言:之前在网上找过一些博客学习AIDL,但是很多只有介绍,但是没有demo可供参考,或者干脆就做在了一个APP里面,达不到两个APP间通信的要求,所以就自己整理一下。
1.创建服务端的app,新建aidl文件,点击编译按钮(如果不编译会找不到定义接口生成的Stub抽象类)
TIM截图20181031143248.png `~ZCISN9ZZO(YIJ]`V}FSNU.png
2.创建一个server供客户端调用,onBind(Intent intent)方法需要返回自定义的AIDL接口
public class MyService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new IBinderImp(){
@Override
public String str(String str) throws RemoteException {
Log.d("MyService",str);
return super.str(str);
}
};
}
}
public class IBinderImp extends My_Service_Int.Stub {
@Override
public String str(String str) throws RemoteException {
return str;
}
}
//注意 android:exported="true" ,不然外部无法访问到
<service
android:name=".MyService"
android:enabled="true"
android:process=":AidlService"
android:exported="true">
<intent-filter>
<action android:name="com.example.kong.myapplication.MyServer" />
</intent-filter>
</service>
3.新建另一个module(客户端),拷贝main目录下的整个AIDL文件夹到此module下,老规矩,编译,然后编写代码绑定服务端的Service,需要设定其action和application的包名
class MainActivity : AppCompatActivity() {
lateinit var my_service_int: My_Service_Int
lateinit var connection: ServiceConnection
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val intents = Intent("com.example.kong.myapplication.MyServer")
intents.setPackage("com.example.kong.myapplication")
// intents.component = ComponentName("com.example.kong.myapplication", "com.example.kong.myapplication.MyServer")
connection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName, service: IBinder) {
Log.d("MainActivity", "链接上了")
//AIDL接口调用asInterface(Binder) 获取到接口对象
my_service_int = My_Service_Int.Stub.asInterface(service)
}
override fun onServiceDisconnected(name: ComponentName) {
}
}
bindService(intents, connection, BIND_AUTO_CREATE)
}
override fun onDestroy() {
super.onDestroy()
unbindService(connection)
}
fun sendMessage(v: View) {
try { //调用接口中的方法,为其赋值
my_service_int.str("新闻联播")
} catch (e: RemoteException) {
e.printStackTrace()
}
}
}
TIM截图20181031151524.png
接下来就测试服务有没有收到消息,我点点点点点点点点点点点点点点点....
TIM截图20181031151558.png好的,测试通过,over
本文参考 https://blog.csdn.net/weixin_41317842/article/details/79138291
网友评论