<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
    主站蜘蛛池模板: 一个人看www在线高清免费看| 四虎成人免费大片在线| a级毛片黄免费a级毛片| 免费视频爱爱太爽了| 五月婷婷亚洲综合| 亚洲欧洲自拍拍偷午夜色| 国产亚洲综合久久| 国产精品色拉拉免费看| 亚洲综合色在线观看亚洲| 亚洲六月丁香婷婷综合| 怡红院免费的全部视频| 日本亚洲成高清一区二区三区| 亚洲avav天堂av在线网毛片| 最近免费中文在线视频| 亚洲色欲久久久综合网东京热| 亚洲欧美日韩国产精品一区| 日本免费一区二区三区 | 你懂的在线免费观看| 亚洲av永久无码精品网站| 午夜亚洲乱码伦小说区69堂| 手机看片久久国产免费| jiz zz在亚洲| 嘿嘿嘿视频免费网站在线观看| 亚洲免费黄色网址| 1000部拍拍拍18勿入免费视频下载| 亚洲国产精品xo在线观看| 好男人视频在线观看免费看片| 美女羞羞喷液视频免费| 日本a级片免费看| 久久最新免费视频| 亚洲精品无码午夜福利中文字幕| 黄色毛片免费网站| 国产精品亚洲片在线观看不卡 | 久久亚洲AV成人无码电影| 国产在线精品观看免费观看| 国产免费牲交视频| 亚洲av永久中文无码精品| 女人被弄到高潮的免费视频| 人人公开免费超级碰碰碰视频 | 亚洲精品国产福利在线观看| 日韩精品无码人妻免费视频|