区别于前面的紧急APN,这里的APN参数主要指常规的SIM卡APN参数,手机在上网时必须传递正确的APN参数给运营商才可以接入移动网络,而常规APN参数的创建是由监听器触发的。
前面在DcTracker初始化过程中注册了大量监听器,其中有两个监听器可以触发APN的创建过程:1、SIM载入完毕;2、APN改变。这两个事件所导致的APN创建流程也都是类似的,分别是:
【当SIM载入完毕时】,将会触发onRecordsLoaded():
前面在DcTracker初始化过程中注册了大量监听器,其中有两个监听器可以触发APN的创建过程:1、SIM载入完毕;2、APN改变。这两个事件所导致的APN创建流程也都是类似的,分别是:
【当SIM载入完毕时】,将会触发onRecordsLoaded():
private void onRecordsLoaded() {
mAutoAttachOnCreationConfig = mPhone.getContext().getResources().getBoolean(com.android.internal.R.bool.config_auto_attach_data_on_creation);
//创建APN参数
createAllApnList();
setInitialAttachApn();
if (mPhone.mCi.getRadioState().isOn()) {
notifyOffApnsOfAvailability(Phone.REASON_SIM_LOADED);
}
//尝试发起数据业务
setupDataOnConnectableApns(Phone.REASON_SIM_LOADED);
}
【当APN改变时】,将会触发onApnChanged():
private void onApnChanged() {
DctConstants.State overallState = getOverallState();
boolean isDisconnected = (overallState == DctConstants.State.IDLE || overallState == DctConstants.State.FAILED);
if (mPhone instanceof GSMPhone) {
((GSMPhone)mPhone).updateCurrentCarrierInProvider();
}
//创建APN参数
createAllApnList();
setInitialAttachApn();
//清除旧的连接
cleanUpAllConnections(!isDisconnected, Phone.REASON_APN_CHANGED);
//尝试发起数据业务
setupDataOnConnectableApns(Phone.REASON_APN_CHANGED);
}
从上面两个过程对比我们发现,他们都通过两个步骤进行APN的创建,分别是createAllApnList()和setInitialAttachApn(),他们的作用分别是创建APN和设置默认APN。
下面分别来介绍这个过程。