工作笔记,代码不能全部贴,记录一下路程以及碰到的问题
1.在服务端创建aidl文件,在AndroidStudio中的创建步骤为:
new—>Android Component,选择Kind为Remote Interface,假设名字为IXXX,创建之后会自动生成IXXX.aidl文件;
2.在跟IXXX.aidl文件的统计目录创建XXX.java文件,继承自service,然后把要跨进程通信的方法都写在要实现IXXX.Stub类中;
3.客户端把aidl文件拷贝过去,并且要保证文件结构跟服务端的文件结构完全一样;
4.客户端连接服务端,具体代码如下
private IXXX mIXXX = null; //IXXX跟上面所提到的IXXX.aidl的名字保持一致
private ServiceConnection mXXXServiceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i(TAG, " onServiceDisconnected !!!");
mIXXX = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(TAG, "onServiceConnected !!!!!!!!! ");
mIXXX = IXXX.Stub.asInterface(service);
}
};
private Intent mXXXService = null;
public void bindSecureDaemonService() {
if (mXXXService == null) {
mXXXService = new Intent("XXX"); //服务端在manifest文件中注册的服务设置的action名称或者服务的类名
mXXXService .setPackage("包名"); //服务端的包名
}
if (mIXXX != null) {
mContext.getApplicationContext().bindService(mXXXService, mXXXServiceConnection, Context.BIND_AUTO_CREATE);
}
}
碰到的问题:
1.由于我使用的是公司内部的SDK编译的,实现IXXX.Stub类中要进行进程间通信的方法时编译不过,解决方法:要在Android.mk中增加LOCAL_SRC_FILES := $(call all-java-files-under, src) \ XX/XX/IXXX.aidl
2.客户端可以连接服务端成功,但是不能调用相应的方法,原因:客户端和服务端的文件结构不一样,其中有些文件客户端有,服务端没有,解决方法:保证文件结构以及文件个数、文件内容跟服务端的完全一致。