1.定义接口
2.编译生成对应java文件
3.编写代码
有些服务端的服务可能需要一些权限,去manifest里添加
activity里
private IUserInfoAidlInterface userInfoAidlInterface;
//人脸识别服务链接
public boolean isAIFaceBind = false;
public ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
userInfoAidlInterface = IUserInfoAidlInterface.Stub.asInterface(service);
isAIFaceBind=true;
Log.d(TAG, "aiFace onServiceConnected");
if (userInfoAidlInterface!=null){
try {
service.linkToDeath(mAIFaceDeathRecipient,0);
Log.d(TAG, "aiFace linkToDeath");
userInfoAidlInterface.registerCallback(userInfoCallback);
Log.d(TAG,"registerCallback");
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
userInfoAidlInterface = null;
isAIFaceBind=false;
Log.d(TAG, "aiFace onServiceDisconnected");
}
};
/**死亡代理, 重连***/
private final IBinder.DeathRecipient mAIFaceDeathRecipient = new IBinder.DeathRecipient() {
@Override
public void binderDied() {
// 当绑定的service异常断开连接后,自动执行此方法
Log.e(TAG,"aiFace binderDied " );
if (userInfoAidlInterface != null){
// 当前绑定由于异常断开时,将当前死亡代理进行解绑
userInfoAidlInterface.asBinder().unlinkToDeath(mAIFaceDeathRecipient, 0);
// 重新绑定服务端的service
Intent reconnect=new Intent();
reconnect.setComponent(new ComponentName(PACKAGE_NAME, CLASS_NAME));
boolean result= bindService(reconnect,connection,BIND_AUTO_CREATE);
Log.d(TAG, "rebindMiguMusic 人脸识别service成功?: " + result);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mInstance=this;
setContentView(R.layout.activity_launcher);
...
// bindService 绑定人脸识别Service
aiFaceIntent=new Intent();
aiFaceIntent.setComponent(new ComponentName(PACKAGE_NAME, CLASS_NAME));
if (!isAIFaceBind){
if (Build.VERSION.SDK_INT >= 26) {
startForegroundService(aiFaceIntent);
} else {
startService(aiFaceIntent);
}
boolean result = bindService(aiFaceIntent, connection, Context.BIND_AUTO_CREATE);
Log.d(TAG, "绑定人脸识别成功" + result);
}else {
Log.d(TAG, "绑定人脸识别 : isBinded" );
}
}
//重新绑定服务的方法
public void rebindAIFace(){
//重新绑定AIFace服务端的service
Intent reconnect=new Intent();
reconnect.setComponent(new ComponentName(PACKAGE_NAME, CLASS_NAME));
if (!isAIFaceBind) {
if (Build.VERSION.SDK_INT >= 26) {
startForegroundService(reconnect);
} else {
startService(reconnect);
}
boolean result = bindService(reconnect, connection, Context.BIND_AUTO_CREATE);
Log.d(TAG, "重新绑定人脸识别成功" + result);
}
}