Android中各种消息监听机制
2017-11-20 17:38
155 查看
1、Boadcast, receiverboadcast:sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));receiver:IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED); context.registerReceiver(mBroadcastReceiver, filter);处理: private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action) || Intent.ACTION_SCREEN_OFF.equals(action)) { String reason = intent.getStringExtra(PhoneWindowManager.SYSTEM_DIALOG_REASON_KEY); if (!PhoneWindowManager.SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS.equals(reason)) { mHandler.sendEmptyMessage(MESSAGE_DISMISS); } } else if (TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED.equals(action)) { // Airplane mode can be changed after ECM exits if airplane toggle button // is pressed during ECM mode if (!(intent.getBooleanExtra("PHONE_IN_ECM_STATE", false)) && mIsWaitingForEcmExit) { mIsWaitingForEcmExit = false; changeAirplaneModeSystemSetting(true); } } } };
2、register listener本质是通过binder机制得以实现的一种注册与回调关系。注册listener进service的通知队列: TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE);
当事件发生时,DefaultPhoneNotifier通过binder回调mPhoneStateListener.callback. r.callback.onServiceStateChanged(new ServiceState(state));
处理:PhoneStateListener mPhoneStateListener = new PhoneStateListener() { @Override public void onServiceStateChanged(ServiceState serviceState) { if (!mHasTelephony) return; //alex@nusmart fix bug:10207 //final boolean inAirplaneMode = serviceState.getState() == ServiceState.STATE_POWER_OFF; final boolean inAirplaneMode = Settings.Global.getInt( mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) == 1;
mAirplaneState = inAirplaneMode ? ToggleAction.State.On : ToggleAction.State.Off; mAirplaneModeOn.updateState(mAirplaneState); mAdapter.notifyDataSetChanged(); } };
3、ContentObserver这是一种监听数据库变化来产生响应的监听机制注册:mContext.getContentResolver().registerContentObserver( Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON), true, mAirplaneModeObserver);)
处理: private ContentObserver mAirplaneModeObserver = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { onAirplaneModeChanged(); } };
2、register listener本质是通过binder机制得以实现的一种注册与回调关系。注册listener进service的通知队列: TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE);
当事件发生时,DefaultPhoneNotifier通过binder回调mPhoneStateListener.callback. r.callback.onServiceStateChanged(new ServiceState(state));
处理:PhoneStateListener mPhoneStateListener = new PhoneStateListener() { @Override public void onServiceStateChanged(ServiceState serviceState) { if (!mHasTelephony) return; //alex@nusmart fix bug:10207 //final boolean inAirplaneMode = serviceState.getState() == ServiceState.STATE_POWER_OFF; final boolean inAirplaneMode = Settings.Global.getInt( mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) == 1;
mAirplaneState = inAirplaneMode ? ToggleAction.State.On : ToggleAction.State.Off; mAirplaneModeOn.updateState(mAirplaneState); mAdapter.notifyDataSetChanged(); } };
3、ContentObserver这是一种监听数据库变化来产生响应的监听机制注册:mContext.getContentResolver().registerContentObserver( Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON), true, mAirplaneModeObserver);)
处理: private ContentObserver mAirplaneModeObserver = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { onAirplaneModeChanged(); } };
相关文章推荐
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- Android开发进阶—Android的消息机制
- Android异步消息的处理机制(looper handler message)
- Android应用开发学习笔记之多线程与Handler消息处理机制
- Android 全面解析 Handler 异步消息处理机制
- Android消息机制
- zhu的工作日记:handler消息处理机制浅解(android)
- [源码分析]Android消息机制之Thread类
- spring整合JMS之异步消息监听机制
- (消息处理机制)Android的消息处理机制(图+源码分析)——Looper,Handler,Message
- Android的消息机制
- 【转】android的消息处理机制(图+源码分析)——Looper,Handler,Message
- Android中使用Handler(消息机制)造成内存泄露的分析和解决
- Android的消息机制之ThreadLocal的工作原理
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- Android HandlerThread 消息循环机制之源代码解析
- Android消息机制
- 从源码来一步一步解析Android中Handler消息机制