<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
    不是一個檔次!此帖旨在分析整個飛行模式的調用邏輯。  回復  更多評論
      
    主站蜘蛛池模板: 亚洲欧洲日产国码久在线| a毛片免费全部播放完整成| 国产亚洲精品AAAA片APP| 国产成人无码免费看视频软件| 久久精品蜜芽亚洲国产AV| 99在线视频免费| 亚洲欧洲自拍拍偷综合| 男女作爱免费网站| 亚洲AV无码成人精品区大在线| 亚洲AV无码一区二区乱子伦 | 亚洲欧美日韩一区二区三区| 无码人妻精品一二三区免费| 亚洲av无码偷拍在线观看| 日韩免费无码一区二区三区| 久久亚洲精品成人av无码网站 | 久久久久免费看黄A片APP| 亚洲日本va中文字幕久久| 亚洲av永久无码| 亚洲精品一级无码鲁丝片 | 超清首页国产亚洲丝袜| 中国一级特黄高清免费的大片中国一级黄色片| 中文字幕亚洲综合久久菠萝蜜| baoyu122.永久免费视频| 亚洲黑人嫩小videos| 叮咚影视在线观看免费完整版| 成人片黄网站色大片免费| 老妇激情毛片免费| 噜噜嘿在线视频免费观看| 黄色免费在线观看网址| 亚洲大尺度无码无码专区| 一级做α爱过程免费视频| 久久精品夜色国产亚洲av| 免费福利网站在线观看| 四虎国产精品成人免费久久| 亚洲AV日韩AV永久无码久久| 久久久久国色AV免费看图片| 深夜福利在线视频免费| 亚洲国产av高清无码| 亚洲免费无码在线| 无限动漫网在线观看免费| 国产久爱免费精品视频|