Android:一篇就够!全面&详细解析APN(涉及内容:GGSN,authtype,MVNO,pdp,Apns 您所在的位置:网站首页 电信网络apn设置哪个好 Android:一篇就够!全面&详细解析APN(涉及内容:GGSN,authtype,MVNO,pdp,Apns

Android:一篇就够!全面&详细解析APN(涉及内容:GGSN,authtype,MVNO,pdp,Apns

2024-07-11 19:26| 来源: 网络整理| 查看: 265

每篇一格言: 人生就像滚雪球,关键是要找到足够湿的雪,和足够长的坡。 ——沃伦巴菲特

目录 1. APN:从概念说起 1.1 从3GPP看APN的定义和角色 1.2 APN包含哪些参数 APN的类型: 1.3 APN的存储位置与加载位置 1.3.1 APN的存储位置 1.3.2 APN的加载位置 1.4虚拟运营商的APN 2. APN的实现机制 2.1 APN的创建: 从XML到database 2.2 APN匹配SIM卡与菜单显示 2.3 PDP时APN的选择 2.4 modem中的APN 附录1 从xml加载到database 附录2。APN的读取与菜单显示 附录3 PDP中的APN

1. APN:从概念说起 1.1 从3GPP看APN的定义和角色

Definition of Access Point Name In the GPRS backbone, an Access Point Name (APN) is a reference to a GGSN. To support inter-PLMN roaming, the internal GPRS DNS functionality is used to translate the APN into the IP address of the GGSN. ——3gpp 23.003

从定义可看出,APN是GGSN的引用,被internal GPRS DNS转换为GGSN的IP地址。 在这里插入图片描述 那么GGSN是什么,又是做什么的呢? GGSN全称Gateway GPRS Support Node, 网关GPRS支持节点

GGSN主要起网关作用,所扮演的角色: 对内:网络传输; (网络接入控制,分组数据的过滤) 对外:路由器(路由选择和分组的转发,IP地址分配)

1.2 APN包含哪些参数

一个典型的APN包含的参数有名称、MCCMNC、接入点、类型。

下面以CMCC APN为例,它包含下面一些参数:

APN还可以包含其他更多的参数,主要有下面这些:

在这里插入图片描述

Note :每个有数据业务的运营商都会设定自己的APN,同一个运营商的APN可能有多条,包括分别用于3G或4G,NET和WAP,不同APN的使用范围和收费会有差别。

APN的类型:

常见的APN类型有下面几种,用途和优先级各有不同。 在这里插入图片描述

1.3 APN的存储位置与加载位置 1.3.1 APN的存储位置

APN以XML的格式存储。 文件名: Apns-conf.xml

源码文件路径: MTK平台(通常):alps\mediatek\frameworks\base\telephony\etc 高通平台(通常):android\vendor\qcom\proprietary\telephony-apps\etc

UE文件路径: system/etc/ Apns-conf.xml

当UE开机后,读取XML中的APN并写入到database中。

database中APN 的table名称: content://telephony/carriers 注:有些平台为了适配dual SIM,可能会加上sub1/sub2等。

1.3.2 APN的加载位置

加载到database: TelephonyProvider读取XML并在database中插入apn的table。

加载到UI菜单: 根据SIM卡的MCCMNC,去匹配database中同样MCCMNC的APN项,并将匹配到的APN填写到菜单列表。

加载到PDP请求: 由DCtracker负责创建/更新waiting APN list,供PDP选用。

1.4虚拟运营商的APN

虚拟运营商(MVNO)没有自营网段,使用了主运营商的网段,因而和主运营商有相同的MCCMNC。为了能够与主运营商区分,虚拟运营商的APN还包含了MVNO参数。MVNO参数分为SPN/PNN/IMSI/GID1,是从SIM卡对应栏位读取的值,目的是从该值中判断该SIM卡是否属于MVNO。

在加载MVNO SIM卡的APN时,会同时去匹配MCCMNC和MVNO参数。

APN的概念部分到此告一段落,下面做个总结: 在这里插入图片描述

2. APN的实现机制 2.1 APN的创建: 从XML到database

在上一章中我们讲到,APN的原始参数存放在XML中; 而UE是通过query database的方式使用APN; 因而必然需要将APN从XML录入到database,这一步在telephonyprovider中实现。

为了更清晰的理解实现思路,避免过多的源码干扰阅读节奏,接下来的分析中涉及到的源码部分,都以伪代码的形式给出,详细的代码以附录形式给出。

telephonyprovider中的initDatabase方法的逻辑(伪代码):

private void initDatabase(SQLiteDatabase db) { 1.打开APN xml文件etc/apns-conf.xml 2. 获得文件句柄后,使用FileReader得到文件字符流 3. 检查APN version一致性 4.加载XMl中的数据到database,具体见loadApns方法 }

源码点这里 对第3点:“检查APN version一致性” 的说明: 随着OS升级,APN字段也在更新,因此检查APN version的目的是为了避免XML与OS不兼容。若version不一致,抛出异常:

// Sanity check. Force internal version and confidential versions to agree int confversion = Integer.parseInt(confparser.getAttributeValue(null, "version")); if (publicversion != confversion) { throw new IllegalStateException("Internal APNS file version doesn't match " + confFile.getAbsolutePath()); }

loadApns的逻辑(伪代码)

private void loadApns(SQLiteDatabase db, XmlPullParser parser) { 1。每次读取parser中的一个element,也就是一条APN数据 2.通过getrow方法将APN转换为Contentvalues; 3.最后通过insertAddingDefaults将键值写入database: }

写入的table名是CARRIERS_TABLE,该table由createCarriersTable方法创建。 该table url是:content://telephony/carriers/

table 创建时机: telephonyprovider的内部类DatabaseHelper在oncrea



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有