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

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

在上一篇文章aidl和sevice都建立完的基础上,实现可以实时监控的AIDL接口

1.新建一个AIDL接口

注:aidl需要手动引入外部 import com.bale.appproxy.IPushMessageInterface;

 2.使用RemoteCallbackList

 3.在你需要发送消息时调用接口

              try {
                    int len = iPushMessageList.beginBroadcast();
                    for (int i = 0; i < len; i++) {
                        iPushMessageList.getBroadcastItem(i).sendFlowMessage("1","text");
                    }
                } catch (RemoteException e) {
                    e.printStackTrace();
                } finally {
                    iPushMessageList.finishBroadcast();
                }

4.注册aidl实时接口 

4.从service传到aidl接口,这一步提供接口给外部调用

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;
    private IPushMessageListener mPushMessageListener;

    //单例模式
    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();
            try {
                iSettingStatusListener.registerMessageListener(iPushMessageInterface);
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }

        @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;
    }


    /**
     * aidl消息推送接口
     */
    private IPushMessageInterface iPushMessageInterface = new IPushMessageInterface.Stub() {
        @Override
        public void sendFlowMessage(String title, String text) throws RemoteException {
            if (mPushMessageListener != null){
                mPushMessageListener.sendFlowMessage(title,text);
            }

        }
    };

    /**
     * 提供外部获取消息推送接口
     * 
     * @param iPushMessageListener
     */
    public void registerIPushMessageListener(IPushMessageListener iPushMessageListener){
        this.mPushMessageListener = iPushMessageListener;
    }

}

二.客户端

     AppManager.getInstance().registerIPushMessageListener(new IPushMessageListener() {
                            @Override
                            public void sendFlowMessage(String s, String s1) {
                                Log.i(TAG,"sendFlowMessage" + s + "s1" +
                                        s1);
                                bt_register_message.setText(s);
                            }
                        });

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值