前言:最近在写AIDL跨进程通讯,遇到一个问题,点击事件后,总是为空, 通过查找代码发现在客户端的连接未成功,问题出现在包名存在差异。所以包名要引起注意!
实现分为两大步骤:
- 创建服务端
- 创建客户端
注意点:build.gradle里的包明必须和AIDL的包名相同
服务端为:
1、创建服务端的AIDL定义想要的方法
2、在服务端写一个Service服务
3、在Service里创建一个内部类继承IMyAidlInterface.Stub
4、在清单文件中注册Service
客户端为:
1、让服务端提供(复制)一份服务端的AIDL的接口及包名拷贝到客户端
2、在Activity里去绑定(连接)Service,并启动(再声明必须保证包名和AIDL包名一致)
3、拿到绑定服务成功后的实例,去做相关的操作
服务端整体代码如下:
/**
*1、实现AIDL接口,并定义方法
*/
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();
}
/**
* 2、继承Service,绑定AIDL,再创建一个内部类 继承IMyAidlInterface.Stub 实现方法
*/
public class MyServer extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
class MyBinder extends IMyAidlInterface.Stub {
@Override
public String