Service和Aidl的使用和理解(一)

一.AIDL单向绑定(服务端)

1.创建Service

 2.新建一个library

 3.新建一个aidl

4.新建完library和aidl接口需要在app中引入

5.创建一个接口提供给外部监听服务是否成功注册

6.新建一个Manager管理类提供方法给外部使用

public class AppManager {
    private static final String TAG = "AppManager";
    private static AppManager appManager;
    private boolean isConnect;
    private Context mContext;
    //aidl接口
    private ISettingStatusListener iSettingStatusListener;
    //服务连接接口
    private IAppServiceListener mIAppServiceListener;

    //单例模式
    public static AppManager getInstance() {
        if (appManager == null) {
            synchronized (AppManager.class) {
                if (appManager == null) {
                    appManager = new AppManager();
                }
            }
        }
        return appManager;
    }

    /**
     * ServiceConnect对象
     */
    private ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            Log.i(TAG, "连接成功" + componentName);
            isConnect = true;
            iSettingStatusListener = ISettingStatusListener.Stub.asInterface(iBinder);
            mIAppServiceListener.onServiceConnect();
        }

        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            isConnect = false;
            Log.i(TAG, "断开连接");
            mIAppServiceListener.onServiceDisconnected();

        }
    };

    /**
     * 绑定服务
     * @param context
     * @param appServiceListener
     */
    public void registerAppService(Context context , IAppServiceListener appServiceListener){
        Log.i(TAG, "registerAppService" );
        mIAppServiceListener = appServiceListener;
        if (mContext == null){
            mContext = context;
        }
        Intent intent = new Intent();
//        intent.setComponent(new ComponentName(Constants.SERVICE_PKG_NAME,Constants.SERVICE_CLS_NAME));
        intent.setAction("com.bale.text.action");
        intent.setPackage("com.bale.text");
        mContext.bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);
    }


    /**
     * 设置开关状态
     * @param a
     */
    public void setDrivingStatus(boolean a){
        Log.i(TAG, "setDrivingStatus" + a);
        if (isConnect){
            if (iSettingStatusListener != null){
                try {
                    iSettingStatusListener.setDrivingStatus(a);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 获取开关状态
     * @return
     */
    public boolean getDrivingStatus(){
        Log.i(TAG, "getDrivingStatus" );
        if (isConnect){
            if (iSettingStatusListener != null){
                try {
                    return iSettingStatusListener.getDrivingStatus();
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        }
        return false;
    }
}

 7.绑定服务bindService时需要注意以下

 一.AIDL单向绑定(客户端)

 

 

    bt_register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AppManager.getInstance().registerAppService(MainActivity.this, new IAppServiceListener() {
                    @Override
                    public void onServiceConnect() {
                        Log.i(TAG,"onServiceConnect");

                    }

                    @Override
                    public void onServiceDisconnected() {
                        Log.i(TAG,"onServiceDisconnected");

                    }
                });
            }
        });


        bt_set_driving_status.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.i(TAG,"setDrivingStatus");
                AppManager.getInstance().setDrivingStatus(true);
            }
        });
        bt_get_driving_status.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                boolean drivingStatus = AppManager.getInstance().getDrivingStatus();
                Log.i(TAG,"getDrivingStatus" + drivingStatus );
            }
        });

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值