<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 閱讀(1843) 評論(0)  編輯  收藏 所屬分類: Android
    主站蜘蛛池模板: 亚洲一区二区三区亚瑟| 国产精品亚洲lv粉色| 中文字幕免费在线看线人动作大片| 日韩高清在线高清免费| 亚洲情A成黄在线观看动漫软件| 97在线视频免费播放| 久久久婷婷五月亚洲97号色| 久久免费视频99| 免费阿v网站在线观看g| 亚洲国产成人无码av在线播放| 老妇激情毛片免费| 成人免费观看一区二区| JLZZJLZZ亚洲乱熟无码| 亚洲蜜芽在线精品一区| 一级女性全黄久久生活片免费| 国产高清免费视频| 亚洲一区在线视频| 手机在线毛片免费播放| 亚洲视频国产视频| 国产成人精品免费视频大全麻豆| 亚洲偷自拍拍综合网| 国产精品成人免费观看| 国产高清免费在线| 亚洲中文久久精品无码1 | 亚洲av无码不卡久久| 国产片AV片永久免费观看| 国产午夜免费福利红片| 色吊丝性永久免费看码| 亚洲国产精品成人精品无码区在线| 免费国产黄网站在线观看视频 | 免费观看一区二区三区| 亚洲成av人片一区二区三区| 乱人伦中文视频在线观看免费| 国内精品免费视频自在线| 黄色免费在线观看网址| 亚洲伊人色欲综合网| 国产成人午夜精品免费视频| 亚洲AV无码资源在线观看| 自拍偷自拍亚洲精品第1页| 未满十八私人高清免费影院| 亚洲A∨无码一区二区三区|