Android系統(tǒng)apn介紹

快速入口: Apn_change完整時序圖

apn_change.png

1. APN概念

APN全稱是Access Point Name根欧,中文即接入點,是通過手機上網(wǎng)時必須配置的一個參數(shù)逗堵,它決定了手機通過哪種接入方式來訪問網(wǎng)絡(luò)慷妙。

2. Apn參數(shù)及初始化

Apn的創(chuàng)建在ContentProvider里面,他所在的Process啟動了芹枷,ContentProvider就會在ActivityThread中啟動衅疙,流程如下:

注:統(tǒng)一使用@類.方法表示流程中的方法

@SQLiteOpenHelper.getDatabaseLocked

@TelephonyProvider.DatabaseHelper.onCreate

createCarriersTable(db, CARRIERS_TABLE);//創(chuàng)建數(shù)據(jù)庫(carriers)

initDatabase(db);//初始化apn數(shù)據(jù)

Carriers內(nèi)的字段都定義在Telephony.java文件的子類Carriers中,各個字段詳情見附件1([Carriers參數(shù)定義]鸳慈。

Android的網(wǎng)絡(luò)配置作為資源文件寫入了XML(/frameworks/base/core/res/res/xml/apns.xml)饱溢,這個資源文件作為Android的默認(rèn)Apns配置,不建議修改該文件走芋,且一般為空绩郎。因為Apn的配置是根據(jù)不同的硬件產(chǎn)品而不同,所以為不同的硬件產(chǎn)品建立各自的配置文件(system/etc/apns-conf.xml) 翁逞,而不去改動默認(rèn)的配置文件(apns.xml)肋杖。

在apn數(shù)據(jù)庫的初始化中,會先加載系統(tǒng)apn然后加載廠商apn挖函。以下為部分代碼:

// Read internal APNS data  

XmlResourceParser parser = r.getXml(com.android.internal.R.xml.apns)

loadApns(db, parser);

// Read external APNS data (partner-provided)     

File confFile = new File(Environment.getRootDirectory(), "etc/apns-conf.xml");

loadApns(db, confparser);

3. Apn數(shù)據(jù)庫的增刪改查

(1)首先創(chuàng)建URI連接:

public Uri createUri = Uri.parse("content://telephony/carriers");

(2)然后根據(jù)前后文獲取ContentResolver訪問數(shù)據(jù)庫:

ContentResolver contentResolver =context.getContentResolver();

(3)寫一個要修改的參數(shù)對状植,contentValues 里面使用HashMap保存:

ContentValues contentValues =new ContentValues();

contentValues.put("name", apn.getName());

(4)增刪改查語句:

contentResolver.insert(createUri, contentValues); 

contentResolver.delete(createUri,"_id=?",new String[] { id });

contentResolver.update(createUri, contentValues, null,null);

contentResolver.query(createUri,projection,selection,selectionArgs,sortOrder)

4. 上層設(shè)置默認(rèn)apn

用戶通過設(shè)置界面進入apn選項界面,當(dāng)更換當(dāng)前的apn選項時,會更新當(dāng)前的apn數(shù)據(jù)庫津畸,然后就會觸發(fā)重建數(shù)據(jù)連接流程振定,時序圖如下:

ui重置apn.png

4.1上層UI進入apn界面流程

在設(shè)置界面中點擊“移動網(wǎng)絡(luò)”選項,進入手機移動網(wǎng)絡(luò)設(shè)置界面肉拓。然后點擊“接入點名稱”時會觸發(fā)點擊事件吩案,然后通過intent又返回到設(shè)置里面開啟apn界面,顯示當(dāng)前apn項,邏輯如下:

@leui_settings_headers//設(shè)置界面布局文件

android:targetClass="com.android.phone.MobileNetworkSettings">

@MobileNetworkSettings//移動網(wǎng)絡(luò)界面創(chuàng)建Options

mGsmUmtsOptions = new GsmUmtsOptions(this, prefSet, mPhone.getPhoneId());

@GsmUmtsOptions//options界面就是“接入點名稱”選項菜單

intent.setAction(Settings.ACTION_APN_SETTINGS);//開啟ApnSettings

@ApnSettings.fillList//打開apn界面后遍歷當(dāng)前apn列表并顯示

@ApnPreference//承載一個apn顯示列

 this(context, attrs, R.attr.apnPreferenceStyle);//引入apn的xml文件

@res/values/themes.xml:129:

<item name="apnPreferenceStyle">@style/ApnPreference</item>

@res/values/styles.xml:351://apn的界面有幾次跳轉(zhuǎn)帝簇,最后在styles中

    <style name="ApnPreference">

        <item name="android:layout">@layout/apn_preference_layout</item>

    </style>

@apn_preference_layout//apn布局文件

4.2 UI重選apn

在apn界面點擊更換一個apn后,會通過uri更新當(dāng)前的apn數(shù)據(jù)庫靠益。接著Dctracker監(jiān)聽到了數(shù)據(jù)庫的變化丧肴,從而開始重新創(chuàng)建數(shù)據(jù)連接:

@ApnSettings.onPreferenceChange//ui改動preferapn

        setSelectedApnKey((String) newValue);

@ApnSettings.setSelectedApnKey//更新apn數(shù)據(jù)庫

resolver.update(getUri(PREFERAPN_URI), values, null, null);

@DcTracker//mApnObserver監(jiān)聽apn數(shù)據(jù)庫變化

p.getContext().getContentResolver().registerContentObserver(Telephony.Carriers.CONTENT_URI, true, mApnObserver);

@DcTracker.ApnChangeObserver.onChange

sendMessage(obtainMessage(DctConstants.EVENT_APN_CHANGED));

@DcTracker.handleMessage//消息id為270355

case DctConstants.EVENT_APN_CHANGED//(270355)

@DcTracker.onApnChanged//創(chuàng)建數(shù)據(jù)連接的方法

tryRestartDataConnections(true, Phone.REASON_APN_CHANGED);

5. DcTracker創(chuàng)建數(shù)據(jù)連接

這里面,我們首先說一下會觸發(fā)Dctraker創(chuàng)建數(shù)據(jù)連接的幾個消息:

 EVENT_APN_CHANGED//(270335)監(jiān)聽apn數(shù)據(jù)庫變化
 EVENT_RECORDS_LOADED//(270338)卡加載
 EVENT_VOICE_CALL_ENDED//(270344)
 EVENT_ROAMING_ON//(270347)
 EVENT_ROAMING_OFF//(270348)
 EVENT_DATA_CONNECTION_ATTACHED//(270352)
 EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED//(270357)
 EVENT_DATA_RAT_CHANGED//(270377)監(jiān)聽底層主動上報的     RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED
 EVENT_MODEM_DATA_PROFILE_READY//(270379)

在重選apn引起的創(chuàng)建數(shù)據(jù)連接流程中胧后,首先通過網(wǎng)絡(luò)類型獲取卡信息芋浮,讀取其中的mcc mnc值,再通過該值查找apn數(shù)據(jù)庫創(chuàng)建apn列表壳快,這些邏輯都在方法createAllApnList里面纸巷;有了apn列表之后,會先找一個初始的apn下發(fā)到modem眶痰,這一步的作用目前不是很明確瘤旨,像創(chuàng)建數(shù)據(jù)連接的一個預(yù)處理。它在以下幾種情況下被調(diào)用:

EVENT_RECORDS_LOADED

EVENT_CDMA_SUBSCRIPTION_SOURCE_CHANGED

EVENT_DATA_RAT_CHANGED

EVENT_APN_CHANGED

然后依據(jù)當(dāng)前情況清空原有數(shù)據(jù)連接竖伯,重新創(chuàng)建存哲。

@DcTracker.tryRestartDataConnections//開始創(chuàng)建連接

createAllApnList//創(chuàng)建apn列表

getPreferredApn//有優(yōu)選apn則獲取

setPreferredApn(-1);//沒有則設(shè)為-1

setInitialAttachApn//設(shè)置初始apn(ia->Preferred->default->first)會通過RIL下發(fā)RIL_REQUEST_SET_INITIAL_ATTACH_APN命令,預(yù)綁定

cleanUpAllConnections

setupDataOnConnectableApns

接著setupDataOnConnectableApns方法選用apn列表中合適的apn開始創(chuàng)建數(shù)據(jù)連接七婴。trySetupData里面的buildWaitingApns方法會對apn列表進行進一步過濾祟偷,有PreferredApn則加入列表并直接返回,使用該apn;如沒有preferredApn會把apn表中滿足條件的apn都加入列表并返回打厘,再使用第一個apn創(chuàng)建連接修肠。

@DcTracker.setupDataOnConnectableApns

trySetupData

@DcTracker.trySetupData

buildWaitingApns

setupData

@DcTracker.setupData

apnSetting = apnContext.getNextWaitingApn();//使用第一個

dcac.bringUp(apnContext...);

經(jīng)過一系列的驗證,各個參數(shù)準(zhǔn)備完畢户盯,發(fā)出創(chuàng)建連接請求嵌施。走到狀態(tài)機,StateMachine的子類接受消息莽鸭,能繼續(xù)創(chuàng)建連接的有DcInactiveState/DcRetryingState艰管,這里我們用的是DcInactiveState。

@DcAsyncChannel.bringUp

         sendMessage(DataConnection.EVENT_CONNECT...)

@StateMachine.SmHandler.processMsg

 while (!curStateInfo.state.processMessage(msg)) {

@DataConnection.DcInactiveState.processMessage//當(dāng)前的子類狀態(tài)處理

onConnect(mConnectionParams);//EVENT_CONNECT//(關(guān)鍵字)

transitionTo(mActivatingState);//狀態(tài)由斷開變?yōu)檎谶B接

@DataConnection.onConnect

mPhone.mCi.setupDataCall(Integer.toString(cp.mRilRat + 2)...);//rillrat代表網(wǎng)絡(luò)類型蒋川,其值+2傳到ril牲芋。[部分log](#_部分log:)及[網(wǎng)絡(luò)類型](#_網(wǎng)絡(luò)類型:)詳情參見附件2。

@RIL.setupDataCall

RIL_REQUEST_SETUP_DATA_CALL//SETUP_DATA_CALL(關(guān)鍵字)

時序圖如下:

dctracker處理數(shù)據(jù)連接.png

6. 底層網(wǎng)絡(luò)狀態(tài)變化觸發(fā)創(chuàng)建apn連接的流程

底層網(wǎng)絡(luò)狀態(tài)發(fā)生變化,會發(fā)出UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED消息通知上層缸浦。

@RIL.processUnsolicited

case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:

mVoiceNetworkStateRegistrants.notifyRegistrants(new AsyncResult(null, null, null));//mVoiceNetworkStateRegistrants發(fā)出通知

@GsmServiceStateTracker//ServiceStateTracker//監(jiān)聽該通知

mCi.registerForVoiceNetworkStateChanged(this, EVENT_NETWORK_STATE_CHANGED, null);

mVoiceNetworkStateRegistrants.add(r);

上層收到通知夕冲,會向底層重新請求新的數(shù)據(jù)連接的各個參數(shù),具體下發(fā)的消息如下(以GsmServiceStateTracker為例):

EVENT_POLL_STATE_OPERATOR//spn

EVENT_POLL_STATE_GPRS//RilData

EVENT_POLL_STATE_REGISTRATION//服務(wù)狀態(tài)裂逐,RilVoice

EVENT_POLL_STATE_NETWORK_SELECTION_MODE//網(wǎng)絡(luò)模式

代碼邏輯如下:

@GsmServiceStateTracker.handleMessage

case EVENT_NETWORK_STATE_CHANGED

@GsmServiceStateTracker.pollState//下發(fā)四個命令

       mPollingContext[0]++;

   mCi.getOperator(obtainMessage(EVENT_POLL_STATE_OPERATOR, mPollingContext));

   mPollingContext[0]++;

   mCi.getDataRegistrationState(obtainMessage(EVENT_POLL_STATE_GPRS, mPollingContext));

   mPollingContext[0]++;

   mCi.getVoiceRegistrationState(obtainMessage(EVENT_POLL_STATE_REGISTRATION, mPollingContext));

   mPollingContext[0]++;

   mCi.getNetworkSelectionMode(obtainMessage(EVENT_POLL_STATE_NETWORK_SELECTION_MODE, mPollingContext));

各個請求連續(xù)發(fā)送完畢后歹鱼,底層會一一回復(fù)。然后上層收到新的參數(shù)卜高,重新配置各個參數(shù):運營商名稱弥姻,數(shù)據(jù)類型,voice類型掺涛,網(wǎng)絡(luò)模式庭敦。配置完后,開始創(chuàng)建數(shù)據(jù)連接薪缆。

@GsmServiceStateTracker.handleMessage

        ...

handlePollStateResult(msg.what, ar);

@GsmServiceStateTracker.handlePollStateResult//負(fù)責(zé)配置各個參數(shù)

        mPollingContext[0]//;//當(dāng)mPollingContext[0]為0時才會走pollStateDone

@GsmServiceStateTracker.pollStateDone

notifyDataRegStateRilRadioTechnologyChanged();

@ServiceStateTracker.notifyDataRegStateRilRadioTechnologyChanged

mDataRegStateOrRatChangedRegistrants.notifyResult(new Pair<Integer, Integer>(drs, rat));

@DcTracker.handleMessage//DCTracker注冊mPhone.getServiceStateTracker().registerForDataRegStateOrRatChanged

case DctConstants.EVENT_DATA_RAT_CHANGED(270377)(this,DctConstants.EVENT_DATA_RAT_CHANGED, null);

onUpdateIcc//更據(jù)當(dāng)前網(wǎng)絡(luò)類型更新sim信息

tryRestartDataConnections//創(chuàng)建數(shù)據(jù)連接

底層網(wǎng)絡(luò)狀態(tài)變化后秧廉,觸發(fā)重新創(chuàng)建數(shù)據(jù)連接的整個時序圖如下:

data_rat_changed.png

7. 底層成功創(chuàng)建數(shù)據(jù)連接后的處理

當(dāng)?shù)讓映晒?chuàng)建數(shù)據(jù)連接后,會向上層發(fā)出RIL_REQUEST_SETUP_DATA_CALL消息拣帽。RIL層接受該消息后疼电,通知狀態(tài)機。狀態(tài)機根據(jù)底層上報的參數(shù)减拭,判斷出重新創(chuàng)建連接成功蔽豺,將狀態(tài)由DcActivatingState改為ActiveState。ActiveState又會發(fā)出通知告訴DcTrackerBase,而后續(xù)處理操作onDataSetupComplete由DcTrackerBase的子類DcTracker完成拧粪。

@RIL.run

case RIL_REQUEST_SETUP_DATA_CALL

@RIL.processResponse

@RIL.processSolicited

transitionTo(mActiveState);

@DcActivatingState.handleMessage()

case EVENT_SETUP_DATA_CONNECTION_DONE:

onSetupConnectionCompleted

transitionTo(mActiveState);

@DcActiveState.enter()

notifyAllOfConnected(Phone.REASON_CONNECTED);

@DataConnection.notifyAllOfConnected

notifyAllWithEvent(null, DctConstants.EVENT_DATA_SETUP_COMPLETE, reason);

@DcTrackerBase.handleMessage

case EVENT_DATA_SETUP_COMPLETE

onDataSetupComplete():

@DcTracker.onDataSetupComplete

時序圖如下:

data_setup_complete.png

附件1_

創(chuàng)建carriers表語句:

db.execSQL("CREATE TABLE " + tableName +

                    "(_id INTEGER PRIMARY KEY," +

                    "name TEXT DEFAULT ''," +

                    "numeric TEXT DEFAULT ''," +

                    "mcc TEXT DEFAULT ''," +

                    "mnc TEXT DEFAULT ''," +

                    "apn TEXT DEFAULT ''," +

                    "user TEXT DEFAULT ''," +

                    "server TEXT DEFAULT ''," +

                    "password TEXT DEFAULT ''," +

                    "proxy TEXT DEFAULT ''," +

                    "port TEXT DEFAULT ''," +

                    "mmsproxy TEXT DEFAULT ''," +

                    "mmsport TEXT DEFAULT ''," +

                    "mmsc TEXT DEFAULT ''," +

                    "authtype INTEGER DEFAULT -1," +

                    "type TEXT DEFAULT ''," +

                    "current INTEGER," +

                    "protocol TEXT DEFAULT 'IP'," +

                    "roaming_protocol TEXT DEFAULT 'IP'," +

                    "carrier_enabled BOOLEAN DEFAULT 1," +

                    "bearer INTEGER DEFAULT 0," +

                    "bearer_bitmask INTEGER DEFAULT 0," +

                    "mvno_type TEXT DEFAULT ''," +

                    "mvno_match_data TEXT DEFAULT ''," +

                    "sub_id INTEGER DEFAULT " + 

                    SubscriptionManager.INVALID_SUBSCRIPTION_ID + 

                    "," +

                    "profile_id INTEGER DEFAULT 0," +

                    "modem_cognitive BOOLEAN DEFAULT 0," +

                    "max_conns INTEGER DEFAULT 0," +

                    "wait_time INTEGER DEFAULT 0," +

                    "max_conns_time INTEGER DEFAULT 0," +

                    "mtu INTEGER DEFAULT 0," +

                    "edited INTEGER DEFAULT " + 

                     Telephony.Carriers.UNEDITED + 

                    "," +

                    "read_only BOOLEAN DEFAULT 0," +

                    "UNIQUE (numeric, mcc, mnc, apn, proxy, port, 

                     mmsproxy, mmsport, mmsc," +

                    "carrier_enabled, bearer, mvno_type, mvno_match_data,                    profile_id));");

carriers參數(shù)定義

定義在Telephony.Carriers中茫虽,

_id//key

name//Entry name

numeric//Numeric operator ID (as String). Usually MCC + MNC.

mcc//Mobile Country Code (MCC).

mnc//Mobile Network Code (MNC).

apn//APN name.

user//APN username.

server//Server address.

password//APN password.

proxy//Proxy address.

port//Proxy port.

mmsproxy//MMS proxy address.

mmsport//MMS proxy port.

mmsc//MMSC URL.

authtype//Authentication type.

(1:PAP/2:CHAP/3:PAP|CHAP)需要跟user password聯(lián)合使用。

type//Comma-delimited list of APN types.(default,mms,supl,dun,ims,ia...)

current// Is this the current APN?

Protocol

//The protocol to use to connect to this APN. One of the PDP_type values in TS 27.007 section 10.1.1. For example: IP, IPV6, IPV4V6, or PPP.

roaming_protocol

//The protocol to use to connect to this APN when roaming. The syntax is the same as protocol.

carrier_enabled//Is this APN enabled?

Bearer

//Radio Access Technology info. To check what values are allowed, refer to android.telephony.ServiceState. This should be spread to other technologies, but is currently only used for LTE (14) and eHRPD (13).

bearer_bitmask

//Radio Access Technology bitmask. To check what values can be contained, refer to android.telephony.ServiceState. 0 indicates all techs otherwise first bit refers to RAT/bearer 1, second bit refers to RAT/bearer 2 and so on. Bitmask for a radio tech R is (1 << (R - 1))

mvno_type

//MVNO type: SPN (Service Provider Name), IMSI, GID (Group Identifier Level 1).

mvno_match_data

//MVNO data. Use the following examples.

SPN: A MOBILE, BEN NL, ...

IMSI: 302720x94, 2060188, ...

GID: 4E, 33, ...

sub_id//The subscription to which the APN belongs to

profile_id//The profile_id to which the APN saved in modem

modem_cognitive//Is the apn setting to be set in modem

max_conns//The max connections of this apn

wait_time//The wait time for retry of the apn

max_conns_time//The time to limit max connection for the apn

mtu//The MTU size of the mobile interface to which the APN connected

edited//Is this APN added/edited/deleted by a user or carrier?

read_only//default?

附件2

網(wǎng)絡(luò)類型:

ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN

RIL_RADIO_TECHNOLOGY_UNKNOWN = 0;

RIL_RADIO_TECHNOLOGY_GPRS = 1;

RIL_RADIO_TECHNOLOGY_EDGE = 2;

RIL_RADIO_TECHNOLOGY_UMTS = 3;

RIL_RADIO_TECHNOLOGY_IS95A = 4;

RIL_RADIO_TECHNOLOGY_IS95B = 5;

RIL_RADIO_TECHNOLOGY_1xRTT = 6;

RIL_RADIO_TECHNOLOGY_EVDO_0 = 7;

RIL_RADIO_TECHNOLOGY_EVDO_A = 8;

RIL_RADIO_TECHNOLOGY_HSDPA = 9;

RIL_RADIO_TECHNOLOGY_HSUPA = 10;

RIL_RADIO_TECHNOLOGY_HSPA = 11;

RIL_RADIO_TECHNOLOGY_EVDO_B = 12;

RIL_RADIO_TECHNOLOGY_EHRPD = 13;

RIL_RADIO_TECHNOLOGY_LTE = 14;

RIL_RADIO_TECHNOLOGY_HSPAP = 15;

RIL_RADIO_TECHNOLOGY_GSM = 16;

RIL_RADIO_TECHNOLOGY_TD_SCDMA = 17;

SIM//RUIM//ISIM

SIMRecords(APPTYPE_USIM,APPTYPE_SIM)

RuimRecords(APPTYPE_RUIM,APPTYPE_CSIM)

IsimUiccRecords(APPTYPE_ISIM)

附件3

apn文件的替換

MTK平臺

@device/mediatek/common/device.mk
PRODUCT_COPY_FILES += device/mediatek/common/apns-conf.xml:system/etc/apns-conf.xml 
修改為:
#PRODUCT_COPY_FILES += device/mediatek/common/apns-conf.xml:system/etc/apns-conf.xml 
 APN_PATH := device/mediatek/common
       XXX_APN_CONFIG_FILE := $(if $(wildcard vendor/xxx/frameworks/etc/apnsconfig/apns-conf.xml),yes,no) 
       ifeq ($(XXX_APN_CONFIG_FILE),yes)
          APN_PATH := vendor/xxx/frameworks/etc/apnsconfig
       endif
 PRODUCT_COPY_FILES := $(APN_PATH)/apns-conf.xml:system/etc/apns-conf.xml $(PRODUCT_COPY_FILES)

高通平臺

@xx/device/qcom/msm8994/msm8994.mk:69:
ifeq ($(wildcard $(QC_PROP_ROOT)/common-noship/etc/device-vendor-noship.mk),)
    ifneq ($(call is-android-codename-in-list,GINGERBREAD HONEYCOMB),true)
        APN_PATH := vendor/xxx/frameworks/etc/apnsconfig
        PRODUCT_COPY_FILES := $(APN_PATH)/apns-conf.xml:system/etc/apns-conf.xml $(PRODUCT_COPY_FILES)
    endif
endif

feature 控制_telephony.ct.apn

vendor/xxx/frameworks/featureslist/
手機目錄: system/etc/permissions/

附件4_部分log:

//////////////-DcTracker創(chuàng)建數(shù)據(jù)連接流程log//////////////////-

09-09 16:53:33.053 D/GsmDCT  ( 3057): [1]handleMessage msg={ when=-546ms what=270352 obj=android.os.AsyncResult@3651063e target=com.android.internal.telephony.dataconnection.DcTracker }

09-09 16:53:33.358 D/GsmDCT  ( 3057): [1]setupDataOnConnectableApns: dataAttached

09-09 16:53:33.360 D/GsmDCT  ( 3057): [1]buildWaitingApns: usePreferred=true canSetPreferApn=true mPreferredApn=null operator=310410 radioTech=11

09-09 16:53:33.374 D/GsmDCT  ( 3057): [1]createDataConnection() X id=0 dc={DC-1: State=DcInactiveState mApnSetting=null RefCount=0 mCid=-1 mCreateTime=-1 mLastastFailTime=-1 mLastFailCause=NONE mTag=1 mRetryManager=RetryManager: { forever=false maxRetry=0 curMaxRetry=0 retry=0 config={null} retryArray={}} mLinkProperties={LinkAddresses: []  Routes: [] DnsAddresses: [] Domains: null MTU: 0} linkCapabilities=[ Transports: CELLULAR Capabilities: NOT_RESTRICTED&TRUSTED&NOT_VPN LinkUpBandwidth>=5898Kbps LinkDnBandwidth>=14336Kbps Specifier: <1>] mApnContexts=[]}

09-09 16:53:33.374 D/GsmDCT  ( 3057): [1]setupData: dcac=DC-1 apnSetting=[ApnSettingV3] Cingular 410, 446, 310410, wap.cingular, , http://mmsc.cingular.com/, wireless.cingular.com, , , -1, default | supl | mms, IP, IP, true, 0, 0, false, 0, 0, 0, 0, , 

09-09 16:53:33.385 D/DC-1    ( 3057): DcInactiveState: mag.what=EVENT_CONNECT

09-09 16:53:33.389 D/DC-1    ( 3057): onConnect: carrier='Cingular 410' APN='wap.cingular' proxy='' port=''

09-09 16:53:33.390 D/RILJ    ( 3057): [3952]> SETUP_DATA_CALL 13 0 wap.cingular WAP@CINGULARGPRS.COM CINGULAR1 3 IP [SUB1]

//////////////-DcTracker創(chuàng)建數(shù)據(jù)連接流程log//////////////////-

//////////-底層網(wǎng)絡(luò)狀態(tài)變化log//////////-

09-10 07:53:32.374 D/GsmSST  ( 3057): [GsmSST1] Poll ServiceState done:  oldSS=[1 1 home null null null  Unknown Unknown CSS not supported -1 -1 RoamInd=-1 DefRoamInd=-1 EmergOnly=false] newSS=[0 0 home AT&T AT&T 310410  UMTS HSPA CSS not supported -1 -1 RoamInd=-1 DefRoamInd=-1 EmergOnly=false] oldMaxDataCalls=20 mNewMaxDataCalls=20 oldReasonDataDenied=-1 mNewReasonDataDenied=-1

09-09 16:53:32.500 D/GsmSST  ( 3057): [GsmSST1] notifyDataRegStateRilRadioTechnologyChanged: drs=0 rat=11

09-09 16:53:32.655 D/GsmDCT  ( 3057): [1]handleMessage msg={ when=-150ms what=270377 obj=android.os.AsyncResult@29a9f9c0 target=com.android.internal.telephony.dataconnection.DcTracker }

//////////-底層網(wǎng)絡(luò)狀態(tài)變化log//////////-
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末既们,一起剝皮案震驚了整個濱河市濒析,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啥纸,老刑警劉巖号杏,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異斯棒,居然都是意外死亡盾致,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門荣暮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庭惜,“玉大人,你說我怎么就攤上這事穗酥』ど蓿” “怎么了惠遏?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骏啰。 經(jīng)常有香客問我节吮,道長,這世上最難降的妖魔是什么判耕? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任透绩,我火速辦了婚禮,結(jié)果婚禮上壁熄,老公的妹妹穿的比我還像新娘帚豪。我一直安慰自己,他們只是感情好草丧,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布狸臣。 她就那樣靜靜地躺著,像睡著了一般方仿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上统翩,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天仙蚜,我揣著相機與錄音,去河邊找鬼厂汗。 笑死委粉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的娶桦。 我是一名探鬼主播贾节,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衷畦!你這毒婦竟也來了栗涂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤祈争,失蹤者是張志新(化名)和其女友劉穎斤程,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菩混,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡忿墅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沮峡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疚脐。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖邢疙,靈堂內(nèi)的尸體忽然破棺而出棍弄,到底是詐尸還是另有隱情望薄,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布照卦,位于F島的核電站式矫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏役耕。R本人自食惡果不足惜采转,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞬痘。 院中可真熱鬧故慈,春花似錦、人聲如沸框全。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽津辩。三九已至拆撼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喘沿,已是汗流浹背闸度。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蚜印,地道東北人莺禁。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像窄赋,于是被迫代替她去往敵國和親哟冬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容