<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
    主站蜘蛛池模板: 欧洲乱码伦视频免费国产| 精品无码AV无码免费专区| 黄瓜视频高清在线看免费下载| 午夜影视日本亚洲欧洲精品一区| 日韩电影免费在线观看网站| 久久永久免费人妻精品下载| 久久伊人久久亚洲综合| 久久国产精品国产自线拍免费| 毛片视频免费观看| 伊人久久五月丁香综合中文亚洲| 你懂得的在线观看免费视频| 久久精品亚洲男人的天堂| 中文字幕在线免费视频| 亚洲成在人线av| 免费人妻无码不卡中文字幕系 | 免费视频精品一区二区| 亚洲不卡无码av中文字幕| 一区二区三区免费看| 亚洲av无码一区二区三区不卡 | 久久久久女教师免费一区| 成人毛片免费观看视频大全| 亚洲av无码一区二区三区在线播放| 免费播放美女一级毛片 | 亚洲欧洲国产综合| 国产男女爽爽爽免费视频| 亚洲人成在线播放网站| 国产亚洲漂亮白嫩美女在线| 国产国拍亚洲精品福利| 全免费a级毛片免费看| 在线观看亚洲精品国产| 亚洲午夜免费视频| 亚洲av中文无码乱人伦在线r▽| 99在线在线视频免费视频观看| 色天使亚洲综合在线观看| 亚洲国产香蕉人人爽成AV片久久| 美女视频黄a视频全免费网站色窝| 国产人成亚洲第一网站在线播放| vvvv99日韩精品亚洲| 美女视频黄.免费网址| 亚洲爆乳精品无码一区二区三区| 特级做A爰片毛片免费69 |