必威体育Betway必威体育官网
当前位置:首页 > IT技术

APN设置 --- 之二

时间:2019-10-04 04:15:29来源:IT技术作者:seo实验室小编阅读:88次「手机版」
 

apn设置

2.2 setInitialattachApn

setInitialAttachApn方法调用流程图如下,

DcTrackerBase的setInitialAttachApn方法如下,

setInitialAttachApn(mAllApnsettings, mPreferredApn);

一般第一次开机时, mPreferredApn为null。

mAllApnSettings为当前SIM卡的对应的APN。

setInitialAttachApn方法主要逻辑如下,

1,为三个APN变量赋值,

ApnSetting iaApnSetting = null; //可用APN中类型包含APN_TYPE_IA(ia)的APN
ApnSetting defaultApnSetting = null;  //可用APN中包含default类型的APN
ApnSetting firstApnSetting = null;  //可用APN的第一个APN
•••
firstApnSetting = apnList.get(0);
for (ApnSetting apn : apnList) {
    // Can't use apn.canhandleType(), as that returns true for APNs that have no type.
   if (ArrayUtils.contains(apn.types, Phoneconstants.APN_TYPE_IA) &&
 apn.carrierEnabled) {
        // The Initial Attach APN is highest priority so use it if there is one
        log("setInitialApn: iaApnSetting=" + apn);
        iaApnSetting = apn;  //为iaApnSetting 变量赋值
        break;
    } else if ((defaultApnSetting == null)
 && (apn.canHandleType(PhoneConstants.APN_TYPE_DEFAULT))) {
         // Use the first default apn if no better choice
         log("setInitialApn: defaultApnSetting=" + apn);
         defaultApnSetting = apn; //为defaultApnSetting变量赋值
    }
}

2,从4个ApnSetting 对象中选择一个进行发起拨号上网请求,优先级依次为iaApnSetting, preferredApn, defaultApnSetting, firstApnSetting,

ApnSetting initialAttachApnSetting = null;
if (iaApnSetting != null) {
    if (DBG) log("setInitialAttachApn: using iaApnSetting");
    initialAttachApnSetting = iaApnSetting;
} else if (preferredApn != null) {
    if (DBG) log("setInitialAttachApn: using preferredApn");
    initialAttachApnSetting = preferredApn;
•••

3,如果这4个值都为空,就不发起拨号请求;否则调用RIL的setInitialAttachApn方法发起拨号请求,

if (initialAttachApnSetting == null) {
    if (DBG) log("setInitialAttachApn: X There in no available apn");
} else {
    if (DBG) log("setInitialAttachApn: X selected Apn=" + initialAttachApnSetting);
mPhone.mCi.setInitialAttachApn(initialAttachApnSetting.apn,
       initialAttachApnSetting.protocol, initialAttachApnSetting.authType,
       initialAttachApnSetting.user, initialAttachApnSetting.password, null);
}

例如,以下是一份开机拨号上网的log,

在这份log中, defaultApnSetting, firstApnSetting的ApnSetting对象完全相同,因此还是选择的defaultApnSetting对象的信息进行attach请求。

RIL的setInitialAttachApn方法如下,

RILrequest rr = RILRequest.obtain(RIL_REQUEST_SET_INITIAL_ATTACH_APN, result);
•••
rr.mParcel.writeString(apn);
rr.mParcel.writeString(protocol);
rr.mParcel.writeInt(authType);
rr.mParcel.writeString(username);
rr.mParcel.writeString(password);
•••
send(rr);

通过socket给rild守护进程发送RIL_REQUEST_SET_INITIAL_ATTACH_APN消息。

到此,虽然还暂时没有设置mPreferredApn,但是已经向rild守护进程发送attach请求了。

2.3 setupDataOnConnectableApns

当SIM卡加载完成,并完成上面2个步骤之后,就会调用DcTracker 的setupDataOnConnectableApns方法。

setupDataOnConnectableApns方法调用流程图如下,

setupDataOnConnectableApns逻辑如下,

1,逐个循环调用mPrioritySortedApncontexts变量中的ApnContext对象,调用buildWaitingApns方法获取对应的ApnSetting对象,

for (ApnContext apnContext : mPrioritySortedApnContexts) {
ArrayList<ApnSetting> waitingApns = null;
••••
 waitingApns = buildWaitingApns(apnContext.getApnType(), radioTech);

2,如果该APN已激活,则调用trySetupData方法发起拨号

if (apnContext.isConnectable()) {
   log("setupDataOnConnectableApns: isConnectable() call trySetupData");
   apnContext.setReason(reason);
   trySetupData(apnContext, waitingApns);
}

setupData最后的逻辑如下,

message msg = obtainMessage();
msg.what = DctConstants.EVENT_DATA_SETUP_COMPLETE;
msg.obj = new Pair<ApnContext, integer>(apnContext, generation);
dcac.bringUp(apnContext, getInitialMaxretry(), profileId, radioTech,
     mAutoAttachOnCreation.get(), msg, generation);

封装EVENT_DATA_SETUP_COMPLETE 消息,然后调用DcAsyncChannel的bringUp方法发起拨号过程。

如果完成拨号过程,就会回调DcTracker的父类DcTrackerBase的handleMessage方法

处理EVENT_DATA_SETUP_COMPLETE 消息,对该消息处理如下,

case DctConstants.EVENT_DATA_SETUP_COMPLETE:
    ondatasetupComplete((AsyncResult) msg.obj);
    break;

调用DcTracker的onDataSetupComplete方法,该方法会将调用setPreferredApn方法将当前已拨号上网的APN写入telephony.db数据库的siminfo表中。

因此,经过这一步骤,终于将siminfo表填写完整了。

详细的拨号上网过程在数据业务那一章节论述,至于 ApnContext是什么,怎么和ApnSetting对象映射的,后面再论述。

相关阅读

如何一步到位做好微信公众号设置、运营、推广

如何建立,又如何获利资金推动上涨的面粉是一个数字,教你如何操纵公众微信号码,开始了微信公共基础操作微信公众的含量一步一步,微通道

excel排序不动首行设置

在使用Excel表格对数据进行排序的时候,网友可能会不希望将表格的第一行或第一列同样计入排序的数据中,想要这样我们就需要在排序时

华硕笔记本BIOS详细设置

转自:http://benyouhui.it168.com/thread-1874010-1-1.html 本帖最后由 redalert01 于 2011-11-27 23:06 编辑BIOS是英文Basic Inp

sqlserver中set IDENTITY_INSERT on 和 off 的设置方

前言 最近频繁用数据库,发现数据库并没有想想的那么好操作,今天遇到了一个插入的问题,表格建好了,往里边插入数据的时候就报错。说se

淘宝店标是什么?该如何设置才好?

为了能够展现表现出店铺的身份,卖家们也都会选择一些一张图片来作为自己的店铺头像,这样一来的话,我们的买家在看到店铺的头像的时候

分享到:

栏目导航

推荐阅读

热门阅读