AIDL的使用小结

1.定义接口

与服务端协商, 定义aidl文件以及接口
在这里插入图片描述
在这里插入图片描述

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);

        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值