RIL模块加载后,会主动上报: [UNSL]<  UNSOL_RESPONSE_RADIO_STATE_CHANGED  {RADIO_OFF} Ril.java收到这个主动上报后会调用 setRadioStateFromRILInt, setRadioStateFromRILInt 将通过 setRadioState上报给 GsmServiceStateTrackerGsmServiceStateTracker 在初始化时注册EVENT_RADIO_STATE_CHANGED用来监听Radio的状态变化。收到EVENT_RADIO_STATE_CHANGED后,调用setPowerStateToDesired再通知RIJD是否打开radio。setPowerStateToDesired中通过mDesiredPowerState 判定是否打开radio。mDesiredPowerState 的值将在GsmServiceStateTracker 初始化时获取。 可以在 GsmServiceStateTracker 获取 mDesiredPowerState 之前就把当前的模式设置为飞行模式。   下面是这个流程的相关函数。   RIL.java private void  setRadioStateFromRILInt(int state) {         RadioState newState;          setRadioState(newState);       }   GsmServiceStateTracker cm.registerForRadioStateChanged(this,  EVENT_RADIO_STATE_CHANGED, null);             case EVENT_RADIO_STATE_CHANGED:                 // This will do nothing in the radio not                 // available case                 Log.d("GSM","handleMessage:EVENT_RADIO_STATE_CHANGED");                  setPowerStateToDesired();                 pollState();        int airplaneMode = Settings.System.getInt(                 phone.getContext().getContentResolver(),                 Settings.System.AIRPLANE_MODE_ON, 0);          mDesiredPowerState = ! (airplaneMode > 0);//获取是否为飞行模式                protected void  setPowerStateToDesired() {            if ( mDesiredPowerState             && cm.getRadioState() == CommandsInterface.RadioState.RADIO_OFF) {             Log.d(LOG_TAG,"power on radio");              cm.setRadioPower(true, null);//通知RILD是否开radio         }          }            BaseCommands     public void  registerForRadioStateChanged(Handler h, int what, Object obj) {         Registrant r = new Registrant (h, what, obj);         synchronized (mStateMonitor) {              mRadioStateChangedRegistrants.add(r);             r.notifyRegistrant();         }     }       protected void  setRadioState(RadioState newState) {         RadioState oldState;         synchronized (mStateMonitor) {             if (Config.LOGV) {                 Log.v(LOG_TAG, "setRadioState old: " + mState                     + " new " + newState);             }             oldState = mState;             mState = newState;             if (oldState == mState) {                 // no state transition                 return;             }              mRadioStateChangedRegistrants.notifyRegistrants();//通知 GsmServiceStateTracker

更多相关文章

  1. Android 解决多个通知发生冲突的问题
  2. activity启动模式
  3. Adapter软件设计模式在Android的应用
  4. Android MVP模式中的OOM
  5. Android的碎片fragment和activity之前的关系 以及MVP模式详解
  6. android启动模式android:launchMode
  7. Android 飞行模式的设置(打开/关闭飞行模式,获取飞行状态状态)

随机推荐

  1. Android SDK 1.6下载地址
  2. Android ListView重要美化属性
  3. Android面试系列文章2018之Android部分We
  4. EditText 的一些属性设置
  5. Android中的Handler的机制与用法详解
  6. Android(安卓)Camera数据流分析全程记录(
  7. 《IT蓝豹》吹雪花demo,学习android传感器
  8. android 编程问题集结1
  9. Android 安全加密:消息摘要Message Digest
  10. android中的UI中的窗口之Window类介绍