其实就是创建一个服务给别人用而已 写完发现就是这么回事
首先是被调用端:
1、创建AIDL文件 new >> AIDL >> ..
864dfe7c764bf0a9b29f7044a797a16.png就这样main下的aidl文件
2、然后生成的文件:
package com.cxz.aidlapp;
// Declare any non-default types here with import statements
interface IMyAidlInterface {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
String getName();
}
3、注意其中的一些东西
basicTypes这个是告诉你能直接用什么类型 然后 你自定义的就实现 序列化P..
String getName();是自己定义的一个方法,用来调用的
4、然后在定义个Service,直接上代码:
package com.cxz.aidlapp
import android.app.Service
import android.content.Intent
import android.os.IBinder
import android.os.RemoteException
/**
* @author caoxiazei
*文件说明:
*
*/
class AIDLService : Service() {
override fun onBind(intent: Intent?): IBinder? {
return MyBinder()
}
internal class MyBinder: IMyAidlInterface.Stub() {
override fun getName(): String {
return "this is a test app"
}
}
}
看到没,就是用binder 去弄的
然后记得注册一下服务,然后定义action
看看调用端
首先先把aidl包拷贝到这边,也是放在main下,而且不用修改一句代码
然后在activity注册那边的服务,并写个调用getname的点击,代码:
class MainActivity : AppCompatActivity() {
val binding: ActivityMainBinding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.tvMore.setOnClickListener {
try {
Toast.makeText(baseContext, mIMyAidlInterface?.getName(), Toast.LENGTH_SHORT)
.show();
} catch (e: Exception) {
Log.e("CXZ_LOG", "------------------->>>>> ${e.message}")
}
}
val intentService = Intent()
intentService.setAction("action.service.AIDLService")
intentService.setPackage("com.cxz.aidlapp")
bindService(intentService, object : ServiceConnection {
override fun onServiceConnected(name: ComponentName, service: IBinder) {
mIMyAidlInterface = IMyAidlInterface.Stub.asInterface(service)
}
override fun onServiceDisconnected(name: ComponentName) {}
}, BIND_AUTO_CREATE)
}
var mIMyAidlInterface: IMyAidlInterface? = null
}
记得加上setPackage也就是Service所在的app的包名
好了,就到这,简单例子搞定
其实就是创建一个服务给别人用而已 写完发现就是这么回事
网友评论