(N)Telephony分析(七)之DataConnection建立

本文深入探讨了Android系统中DataConnection的建立过程,从DcTracker的初始化开始,涉及ServiceStateTracker的EVENT_SIM_READY事件处理,接着分析RIL类的getDataRegistrationState方法,直至setupDataOnConnectableApns和setupData方法的调用,详细阐述了DataConnection建立的完整流程。
摘要由CSDN通过智能技术生成

在前面,我们分析过DcTracker的初始化的时候,我们有看过,在DcTracker的构造方法中,调用有如下这个方法

private void registerForAllEvents() {
    mPhone.mCi.registerForAvailable(this, DctConstants.EVENT_RADIO_AVAILABLE, null);
    mPhone.mCi.registerForOffOrNotAvailable(this,
            DctConstants.EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null);
    mPhone.mCi.registerForDataNetworkStateChanged(this,
            DctConstants.EVENT_DATA_STATE_CHANGED, null);
    // Note, this is fragile - the Phone is now presenting a merged picture
    // of PS (volte) & CS and by diving into its internals you're just seeing
    // the CS data.  This works well for the purposes this is currently used for
    // but that may not always be the case.  Should probably be redesigned to
    // accurately reflect what we're really interested in (registerForCSVoiceCallEnded).
    mPhone.getCallTracker().registerForVoiceCallEnded(this,
            DctConstants.EVENT_VOICE_CALL_ENDED, null);
    mPhone.getCallTracker().registerForVoiceCallStarted(this,
            DctConstants.EVENT_VOICE_CALL_STARTED, null);
    registerServiceStateTrackerEvents();
 //   SubscriptionManager.registerForDdsSwitch(this,
 //          DctConstants.EVENT_CLEAN_UP_ALL_CONNECTIONS, null);
    mPhone.mCi.registerForPcoData(this, DctConstants.EVENT_PCO_DATA_RECEIVED, null);
}
其中有调用到registerServiceStateTrackerEvents方法

public void registerServiceStateTrackerEvents() {
	// Leo,注册DataConnectionAttached消息
    mPhone.getServiceStateTracker().registerForDataConnectionAttached(this,
            DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null);
    mPhone.getServiceStateTracker().registerForDataConnectionDetached(this,
            DctConstants.EVENT_DATA_CONNECTION_DETACHED, null);
    mPhone.getServiceStateTracker().registerForDataRoamingOn(this,
            DctConstants.EVENT_ROAMING_ON, null);
    mPhone.getServiceStateTracker().registerForDataRoamingOff(this,
            DctConstants.EVENT_ROAMING_OFF, null);
    mPhone.getServiceStateTracker().registerForPsRestrictedEnabled(this,
            DctConstants.EVENT_PS_RESTRICT_ENABLED, null);
    mPhone.getServiceStateTracker().registerForPsRestrictedDisabled(this,
            DctConstants.EVENT_PS_RESTRICT_DISABLED, null);
    mPhone.getServiceStateTracker().registerForDataRegStateOrRatChanged(this,
            DctConstants.EVENT_DATA_RAT_CHANGED, null);
}
这样,就将当前的DcTracker和ServiceStateTracker绑定到一起了,我们看第一个注册消息EVENT_DATA_CONNECTION_ATTACHED,那么他是怎么激活接收的呢?

这个我么就要分析下ServiceStateTracker了,在SIM卡信息加载读取完成后,ServiceStateTracker会发出一个EVENT_SIM_READY消息,然后在其中进行处理

case EVENT_SIM_READY:
    // Reset the mPreviousSubId so we treat a SIM power bounce
    // as a first boot.  See b/19194287
    mOnSubscriptionsChangedListener.mPreviousSubId.set(-1);
    pollState();
    // Signal strength polling stops when radio is off
    queueNextSignalStrengthPoll();
    break;
恩,调用了pollState方法

public void pollState() {
    pollState(false);
}
public void pollState(boolean modemTriggered) {
    mPollingContext = new int[1];
    mPollingContext[0] = 0;

    switch (mCi.getRadioState()) {
        ......

        default:
            // Issue all 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值