android aidl 通讯 --- 客户端

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zh_1191/article/details/82221305

AIDL是什么

  • AIDL是Android Interface definition language的缩写。
  • AIDL是Android中IPC(Inter-Process Communication)方式中的一种。
  • AIDL的作用是让自己的APP里绑定一个其他APP的service。这样自己的APP就可以和其他APP交互通讯了。

客户端

场景是这样的:在几方合作的项目中,已经有一方的应用做好了AIDL接口了,我们调用其 接口,获取需要的信息即可。

  • 根据服务端的aidl接口定义,在项目中生成xxx.aidl文件(当然最好是和服务端要文件,直接粘贴就好)。
    注意:包名路径要一致。
  • 根据服务端权限要求,在AndroidManifest.xml进行权限申明。例如:
    <uses-permission android:name="xxx.xxx.xxx" />
  • 使用:
private IServiceATM mIServiceATM;

@Override
public void onCreate() {

    ……

    Log.w(TAG, "bindService mIServiceATM - start ");
    Intent cfgIntent = new Intent();
    cfgIntent.setAction("xxx.xxx.xxx");
    //cfgIntent.setPackage("xx.packagename.xxx");
    Log.w(TAG, "bindService cfgIntent created. ");

    //绑定服务
    bindService(cfgIntent, new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            Log.w(TAG, "            onServiceConnected - start");
            mIServiceATM = IServiceATM.Stub.asInterface(service);
            Log.w(TAG, "            onServiceConnected -   end");
            Log.w(TAG, "bindService mIServiceATM onServiceConnected " + mIServiceATM.toString());
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.w(TAG, "bindService mIServiceATM onServiceDisconnected");
        }

    }, BIND_AUTO_CREATE);

}

/**
调用远程服务,获取信息
*/
public String getFingerprint(){
    return mIServiceATM.getFingerprint("0x00000037");
}
  • 注意:
    在上面有几点要注意。
    1、Intent是否需要设置包名,这个需要自己实际调试才知道,与OS版本有关系。
    2、要与服务方获取到正确的:权限申明名称、Intent action名称。
    3、Log.w(),只是自己为了方便调试。

服务端

<后续再补充>

猜你喜欢

转载自blog.csdn.net/zh_1191/article/details/82221305