版权声明:本文为博主原创文章,未经博主允许不得转载。 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(),只是自己为了方便调试。
服务端
<后续再补充>