Android中使用aidl跨进程通信

工作笔记,代码不能全部贴,记录一下路程以及碰到的问题
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.客户端可以连接服务端成功,但是不能调用相应的方法,原因:客户端和服务端的文件结构不一样,其中有些文件客户端有,服务端没有,解决方法:保证文件结构以及文件个数、文件内容跟服务端的完全一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值