<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
    主站蜘蛛池模板: 亚洲精品偷拍视频免费观看| 国产卡二卡三卡四卡免费网址| 国产免费拔擦拔擦8x| 亚洲另类无码一区二区三区| 在线观看日本免费a∨视频| 亚洲人成电影院在线观看| 成人免费福利视频| 99精品视频在线观看免费专区 | 精品一区二区三区无码免费视频| 免费a级毛片高清视频不卡| 国产亚洲一区二区精品| 91国内免费在线视频| 人人狠狠综合久久亚洲婷婷| 国产好大好硬好爽免费不卡| 亚洲国产精品一区二区久| 四虎成人免费影院网址| 国产亚洲综合一区二区三区| 久久精品国产精品亚洲下载| 免费在线观看一级片| 亚洲欧洲久久久精品| 国产羞羞的视频在线观看免费| 亚洲精品亚洲人成在线观看麻豆| 2020久久精品国产免费| 国产精品无码亚洲精品2021| jlzzjlzz亚洲乱熟在线播放| 亚洲免费视频网站| 亚洲日韩一区二区三区| 亚洲综合国产一区二区三区| 91短视频在线免费观看| 色欲色欲天天天www亚洲伊| MM131亚洲国产美女久久| 亚洲一区免费视频| 看全免费的一级毛片| 久久亚洲精品成人综合| 国内精品免费视频自在线| 波霸在线精品视频免费观看| 亚洲精品mv在线观看| 亚洲成a人片在线播放| 99久久精品免费视频| 在线观看亚洲免费视频| 911精品国产亚洲日本美国韩国 |