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

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

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

    Calvin's Tech Space

    成于堅忍,毀于浮躁

       :: 首頁 :: 聯系 :: 聚合  :: 管理

    GsmDataConnectionTracker在實例化時,會注冊一個觀察者,監視apn數據庫的變化。
    p.getContext().getContentResolver().registerContentObserver(
                    Telephony.Carriers.CONTENT_URI, true, apnObserver);
                   
    當改變apn后,Settings應用更新apn數據庫,ApnChangeObserver的onChange被調用,發送EVENT_APN_CHANGED消息:
    sendMessage(obtainMessage(EVENT_APN_CHANGED));

    接著onApnChanged()@GsmDataConnectionTracker.java被調用
          -trySetupData(Phone.REASON_APN_CHANGED)@GsmDataConnectionTracker.java
            --setupData(String reason)@GsmDataConnectionTracker.java
           
            private boolean setupData(String reason) {
            ApnSetting apn;
            GsmDataConnection pdp;

            apn = getNextApn();
            if (apn == null) return false;
           
            //獲取一個狀態為inactive的pdp連接對象
            pdp = findFreePdp();
            if (pdp == null) {
                if (DBG) log("setupData: No free GsmDataConnection found!");
                return false;
            }
            mActiveApn = apn;
            mActivePdp = pdp;

            Message msg = obtainMessage();
            msg.what = EVENT_DATA_SETUP_COMPLETE;
            msg.obj = reason;
           
            //開始激活這個pdp
            //在android2.0.1版本時,有一個PdpConnection.java來進行連接,2.2時這個類被刪掉了,connect的功能合并到GsmDataConnection里面
            pdp.connect(msg, apn);
           
            //設置這個pdp連接狀態為INITING
            setState(State.INITING);
            if (DBG) log("setupData for reason: "+reason);
           
            //通知上層應用數據連接狀態改變
            phone.notifyDataConnection(reason);
            return true;
        }
       
        其中,在這一層,數據連接共七個狀態:
            IDLE,
            INITING,
            CONNECTING,
            SCANNING,
            CONNECTED,
            DISCONNECTING,
            FAILED
           
            對上層應用來說,這七個狀態劃分為四種狀態(getDataConnectionState()@GSMPhone.java):
            CONNECTED, CONNECTING, DISCONNECTED, SUSPENDED;
            分別對應TelephonyManager的四種連接狀態。
           
            開始激活PDP連接時,設置狀態為State.INITING,調用phone.notifyDataConnection(reason)發出通知,后續調用過程為:
            notifyDataConnection(String reason)@PhoneBase.java
              --notifyDataConnection(Phone sender, String reason)@DefaultPhoneNotifier.java
                .
                .   這里需要經過IPC調用
                .
                notifyDataConnection()@TelephonyRegistry.java
                  --onDataConnectionStateChanged()
                 
    當連接成功后,onDataSetupComplete()@GsmDataConnectionTracker.java被調用
    通過phone.notifyDataConnection(reason);回調應用層的onDataConnectionStateChanged()方法。

    ps:可以通過adb logcat -b radio查看激活數據連接時,radio層的log輸出。
    posted on 2010-11-23 14:12 calvin 閱讀(1835) 評論(0)  編輯  收藏 所屬分類: Android
    主站蜘蛛池模板: 猫咪www免费人成网站| 久久久久久亚洲精品中文字幕 | 亚洲国产人成中文幕一级二级| youjizz亚洲| 成熟女人特级毛片www免费| 亚洲国产亚洲综合在线尤物| 亚洲视频免费在线看| 亚洲最大免费视频网| 久久九九兔免费精品6| 亚洲AV成人无码天堂| 97人伦色伦成人免费视频| 亚洲一区二区三区高清在线观看 | 久久99精品免费一区二区| 久久久久亚洲精品天堂久久久久久 | 亚洲成人午夜电影| 四虎永久在线精品免费网址| 亚洲精品无码久久久久YW| 国产又粗又长又硬免费视频| 一级黄色毛片免费看| 久久精品国产亚洲av四虎| 亚洲一区二区免费视频| 色窝窝亚洲AV网在线观看| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久久久亚洲AV综合波多野结衣 | 又粗又黄又猛又爽大片免费| A毛片毛片看免费| 亚洲精选在线观看| a级毛片无码免费真人| 一级黄色毛片免费看| 亚洲永久中文字幕在线| 日本免费的一级v一片| 两性色午夜视频免费播放| 亚洲日产2021三区| 国产18禁黄网站免费观看| 日本免费在线中文字幕| 亚洲首页国产精品丝袜| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲色偷偷av男人的天堂| 日韩在线a视频免费播放| 国产vA免费精品高清在线观看| 亚洲国产香蕉碰碰人人|