一、服务端
在src\main下新建aidl文件MsgManager.aidl
package com.zxqn.testapp;
import com.zxqn.testapp.MsgListener;
interface MsgManager {
String getMsg();
void setMsg(in String msg);
void registerListener(MsgListener listener);
void unregisterListener(MsgListener listener);
}
以及MsgListener.aidl文件
package com.zxqn.testapp;
interface MsgListener {
void onMsgChange(in String msg);
}
新建service
package com.zxqn.testapp
import android.app.Service
import android.content.Intent
import android.os.IBinder
class AIDLService : Service() {
object ServiceBinder : MsgManager.Stub() {
private var msg: String = ""
private var listenerString : MsgListener? = null
override fun getMsg(): String {
synchronized(this) {
return msg
}
}
override fun setMsg(msg: String) {
synchronized(this) {
listenerString?.onMsgChange(msg)
}
}
override fun registerListener(listener: MsgListener?) {
synchronized(this) {
if (listener != null) {
listenerString = listener
}
}
}
override fun unregisterListener(listener: MsgListener?) {
synchronized(this) {
listenerString = listener
}
}
}
override fun onBind(p0: Intent?): IBinder {
return ServiceBinder
}
}
mainfests中配置service
<service android:name=".AIDLService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.zxqn.testapp.AIDLService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
Activity启动service并用EditText以及Button配合发送数据
val etContent = findViewById<EditText>(R.id.et_content)
val intentStart = Intent(this, AIDLService::class.java)
startService(intentStart)
findViewById<Button>(R.id.btn_commit).setOnClickListener {
AIDLService.ServiceBinder.msg = etContent.text.toString()
}
服务端配置完成。
二、客户端
同样在在src\main下新建aidl文件MsgManager.aidl以及MsgListener.aidl文件
package com.zxqn.testapp;
interface MsgListener {
void onMsgChange(in String msg);
}
package com.zxqn.testapp;
import com.zxqn.testapp.MsgListener;
interface MsgManager {
String getMsg();
void setMsg(in String msg);
void registerListener(MsgListener listener);
void unregisterListener(MsgListener listener);
}
rebuild项目后直接引用
private fun bindTestService() {
val intent = Intent().apply {
action = "com.zxqn.testapp.AIDLService"
setPackage("com.zxqn.testapp")
}
bindService(intent, testCon, BIND_AUTO_CREATE)
}
private val testCon: ServiceConnection = object : ServiceConnection {
override fun onServiceConnected(componentName: ComponentName, p1: IBinder?) {
msgManager = MsgManager.Stub.asInterface(p1)
Timber.tag(TAG).d(msgManager.msg)
msgManager.registerListener(msgListener)
}
override fun onServiceDisconnected(componentName: ComponentName?) {
Timber.tag(TAG).d(componentName.toString())
}
}
val msgListener = object : MsgListener.Stub(){
override fun onMsgChange(msg: String?) {
Timber.tag(TAG).d("msgListener $msg")
}
}
结束。