<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-1  評論-68  文章-98  trackbacks-0
    作者:徐建祥(netpirate@gmail.com)
    日期:2009/11/05
    網址:http://www.anymobile.org



    1.1 通過com.android.settings.WirelessSettings打開飛行模式;

    1.1.1 設置飛行模式值;
    Settings.System.putInt(mContext.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, enabling ? 1 : 0);

    1.1.2 發出Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED)。
    AirplaneModeEnabler.setAirplaneModeOn(boolean enabling)

    1.2 關閉相關的服務連接

    1.2.1 關閉WIFI;
    frameworks/base/services/java/com/android/server/WifiService.BroadcastReceiver.onReceive(...)

    1.2.2 關閉Bluetooth;
    frameworks/base/core/java/android/server/BluetoothDeviceService.BroadcastReceiver.onReceive(...)

    1.2.3 關閉RADIO。
    PhoneApp.PhoneAppBroadcastReceiver.onReceive(...) -> GSMPhone.setRadioPower(false)->ServiceStateTracker.setRadioPower(false)->ServiceStateTracker.setPowerStateToDesired()->RIL.setRadioPower(true, null)

    2/ 取消飛行模式

    與打開飛行模式流程類似,false改為true,略。

    3/ 飛行模式啟動流程

    在SIM_READY后,ServiceStateTracker收到RADIO_STATE_CHANGED通知后,關閉RADIO;WIFI和藍牙部分,則會在對應的服務程序中判斷飛行模式設置,如果是飛行模式,則不可用。

    下面是RADIO OFF流程:

    3.1 正常開機,在RADIO STATE切換到SIM_READY狀態后,向上發出EVENT_RADIO_STATE_CHANGED通知;
    RADIO.STATE = RADIO_STATE_UNAVAILABLE->RADIO_STATE_OFF->SIM_NOT_READY->SIM_READY
    (hardware/ril/reference-ril/reference-ril.c)

    3.2 ServiceStateTracker.java初始化,設置mDesiredPowerState = ! (airplaneMode > 0),并調用RIL接口注冊EVENT_RADIO_STATE_CHANGED;
    frameworks/base/telephony/java/com/android/internal/telephony/gsm/ServiceStateTracker.java

    3.3 ServiceStateTracker.java處理RADIO STATE的變化,如果不是飛行模式,設置RADIO狀態為ON;如果是飛行模式,且開機狀態,則關掉RADIO;
     1     public void handleMessage (Message msg)
     2             case EVENT_RADIO_STATE_CHANGED:
     3                 // This will do nothing in the radio not
     4                 // available case
     5                 setPowerStateToDesired();
     6                 pollState();
     7                 break;
     8     private void setPowerStateToDesired()
     9         if (mDesiredPowerState
    10             && cm.getRadioState() == CommandsInterface.RadioState.RADIO_OFF
    11         ) {
    12             cm.setRadioPower(truenull);
    13         } else if (!mDesiredPowerState && cm.getRadioState().isOn()) {
    14             dcTracker.cleanConnectionBeforeRadioOff();
    15             // If it's on and available and we want it off..
    16             cm.setRadioPower(falsenull);
    17         } // Otherwise, we're in the desired state
    18     }

    3.4 RADIO關掉后(狀態變為RADIO_OFF),再向上發一個EVENT_RADIO_STATE_CHANGED通知,參考3.3。
    posted on 2009-11-05 19:46 Xu Jianxiang 閱讀(4418) 評論(3)  編輯  收藏 所屬分類: Android

    評論:
    # re: Android 1.5: 飛行模式分析 2011-07-13 16:48 | DK
    這個帖子寫得太麻煩,大家可以看看這個帖子
    http://bbs.gfan.com/android-1996857-1-1.html  回復  更多評論
      
    # re: Android 1.5: 飛行模式分析[未登錄] 2011-08-10 14:18 | Xu Jianxiang
    @DK
    一個是系統級的修改,一個是應用級的,呵呵!  回復  更多評論
      
    # re: Android 1.5: 飛行模式分析[未登錄] 2011-12-19 18:55 | jet
    @DK
    不是一個檔次!此帖旨在分析整個飛行模式的調用邏輯。  回復  更多評論
      
    主站蜘蛛池模板: 亚洲AV女人18毛片水真多| 久久水蜜桃亚洲av无码精品麻豆| 亚洲中字慕日产2021| 最新猫咪www免费人成| 2022年亚洲午夜一区二区福利 | 亚洲免费视频一区二区三区| 免费国产成人高清视频网站| 中文字幕亚洲电影| 亚洲第一视频在线观看免费| 久久久久无码专区亚洲av| 最近国语视频在线观看免费播放| 美女视频黄的全免费视频网站| 国产亚洲自拍一区| a视频免费在线观看| 亚洲狠狠ady亚洲精品大秀| 中文字幕av无码无卡免费| 亚洲视频在线观看2018| 久久综合给合久久国产免费| 四虎免费久久影院| 亚洲人成图片网站| 免费日本黄色网址| 亚欧洲精品在线视频免费观看| 国产亚洲精品岁国产微拍精品| 狼人大香伊蕉国产WWW亚洲| 皇色在线视频免费网站| 亚洲精品动漫免费二区| 亚洲午夜日韩高清一区| 99视频在线看观免费| jiz zz在亚洲| 国产成人麻豆亚洲综合无码精品| 日日摸日日碰夜夜爽亚洲| 亚洲欧洲精品成人久久曰影片 | 国产亚洲精品国产福利在线观看| 国产亚洲AV夜间福利香蕉149| 免费国产成人18在线观看| 亚洲综合色婷婷在线观看| 亚洲综合国产一区二区三区| xx视频在线永久免费观看| 添bbb免费观看高清视频| 成人黄软件网18免费下载成人黄18免费视频 | 亚美影视免费在线观看|