Android APN配置

Android:一篇就够!全面&详细解析APN(涉及内容:GGSN,authtype,MVNO,pdp,Apns-conf,supl,hipri,dun) 全面解析android APN 此博文写作坚持以下理念: 图胜于表,表胜于言; 最好的解释是不用解释; 1. APN的概念 1.1 APN的定义 Definition of Access Point Name In the GPRS backbone, an Access Point Name (APN) is a reference to a GGSN. To support inter-PLM... 阅读详情
如果要支持多个运营商的支持就要在apns-conf.xml中加入。
Android APN配置
分类: 【Android 系统分析】   497人阅读  评论(0)  收藏  举报

目录(?)[+]

APN概念      


APN(Access Point Name),即“接入点名称”,用来标识GPRS的业务种类,目前分为两大类:CMWAP(通过GPRS访问WAP业务)、CMNET(除了WAP以外的服务目前都用CMNET,比如连接因特网等)。是通过手机上网时必须配置的一个参数,它决定了您的手机通过哪种接入方式来访问网络。业务流程GPRS专网系统终端上网登录服务器平台的流程为:
  1)用户发出GPRS登录请求,请求中包括由移动公司为GPRS专网系统专门分配的专网APN;
  2)根据请求中的APN,SGSN向DNS服务器发出查询请求,找到与企业服务器平台连接的GGSN,并将用户请求通过GTP隧道封装送给GGSN;
  3)GGSN将用户认证信息(包括手机号码、用户账号、密码等)通过专线送至Radius进行认证;
  4)Radius认证服务器看到手机号等认证信息,确认是合法用户发来的请求,向DHCP服务器请求分配用户地址;
  5)Radius认证通过后,由Radius向GGSN发送携带用户地址的确认信息;
  6)用户得到了IP地址,就可以携带数据包,对GPRS专网系统信息查询和业务处理平台进行访问。

Android自带的内部APN配置文件


frameworks/base/core/res/res/xml/apns.xml文件内容:

[html]  view plain copy
  1. <!-- If you edit this version, also edit the version in the partner-supplied  
  2.     apns-conf.xml configuration file -->  
  3. <apns version="7">  
  4.   
  5. </apns>  

该文件被编译到res.apk中,通过android的资源管理器进行访问。

第三方提供的APN配置文件

在Android源码build目录下,通过搜索apns-conf.xml可以找到在各个board中分别有配置:


在编译该product时会将device/generic/goldfish/data/etc/apns-conf.xml文件拷贝到system/etc/目录下,最后打包到system.img中。

APN配置加载


android通过telephony.db数据库中的 carriers表来保存所有的APN配置信息


packages/providers/TelephonyProvider/src/com/android/providers/telephony/TelephonyProvider.java文件中的内部类DatabaseHelper用于创建telephony.db数据库

[java]  view plain copy
  1. public void onCreate(SQLiteDatabase db) {  
  2.     // Set up the database schema  
  3.     db.execSQL("CREATE TABLE " + CARRIERS_TABLE +  
  4.         "(_id INTEGER PRIMARY KEY," +  
  5.             "name TEXT," +  
  6.             "numeric TEXT," +  
  7.             "mcc TEXT," +  
  8.             "mnc TEXT," +  
  9.             "apn TEXT," +  
  10.             "user TEXT," +  
  11.             "server TEXT," +  
  12.             "password TEXT," +  
  13.             "proxy TEXT," +  
  14.             "port TEXT," +  
  15.             "mmsproxy TEXT," +  
  16.             "mmsport TEXT," +  
  17.             "mmsc TEXT," +  
  18.             "authtype INTEGER," +  
  19.             "type TEXT," +  
  20.             "current INTEGER," +  
  21.             "protocol TEXT," +  
  22.             "roaming_protocol TEXT," +  
  23.             "carrier_enabled BOOLEAN," +  
  24.     "preset BOOLEAN default false," +  
  25.             "bearer INTEGER);");  
  26.     //从APN配置xml文件中读取APN配置,并存储到数据表carriers中  
  27.     initDatabase(db);  
  28. }  
APN配置信息加载分为两部分,首先从Android自带的内部APN配置文件中读取配置信息,然后在读取第三方提供的APN配置文件信息。

[java]  view plain copy
  1. private void initDatabase(SQLiteDatabase db) {  
  2.     // Read internal APNS data  
  3.     Resources r = mContext.getResources();  
  4.     //读取frameworks/base/core/res/res/xml/apns.xml文件  
  5.     XmlResourceParser parser = r.getXml(com.android.internal.R.xml.apns);  
  6.     int publicversion = -1;  
  7.     try {  
  8.         XmlUtils.beginDocument(parser, "apns");  
  9.         //读取APN配置版本信息  
  10.         publicversion = Integer.parseInt(parser.getAttributeValue(null, "version"));  
  11.         //加载APN配置信息,并保存到数据表中  
  12.         loadApns(db, parser);  
  13.     } catch (Exception e) {  
  14.         Log.e(TAG, "Got exception while loading APN database.", e);  
  15.     } finally {  
  16.         parser.close();  
  17.     }  
  18.   
  19.    // Read external APNS data (partner-provided)  
  20.     XmlPullParser confparser = null;  
  21.     // Environment.getRootDirectory() is a fancy way of saying ANDROID_ROOT or "/system".  
  22.     //读取system/etc/apns-conf.xml文件  
  23.     File confFile = new File(Environment.getRootDirectory(), PARTNER_APNS_PATH);  
  24.     FileReader confreader = null;  
  25.     try {  
  26.         confreader = new FileReader(confFile);  
  27.         confparser = Xml.newPullParser();  
  28.         confparser.setInput(confreader);  
  29.         XmlUtils.beginDocument(confparser, "apns");  
  30.         // 读取第三方提供的APN配置版本号  
  31.         int confversion = Integer.parseInt(confparser.getAttributeValue(null, "version"));  
  32.         //判断第三方提供的APN配置版本号是否与Android自带的APN配置版本号相同  
  33.         if (publicversion != confversion) {  
  34.             throw new IllegalStateException("Internal APNS file version doesn't match "  
  35.                     + confFile.getAbsolutePath());  
  36.         }  
  37.         //如果版本号相同,读取APN配置信息  
  38.         loadApns(db, confparser);  
  39.     } catch (FileNotFoundException e) {  
  40.         // It's ok if the file isn't found. It means there isn't a confidential file  
  41.         // Log.e(TAG, "File not found: '" + confFile.getAbsolutePath() + "'");  
  42.     } catch (Exception e) {  
  43.         Log.e(TAG, "Exception while parsing '" + confFile.getAbsolutePath() + "'", e);  
  44.     } finally {  
  45.         try { if (confreader != null) confreader.close(); } catch (IOException e) { }  
  46.     }  
  47. }  
从APN信息加载源码中可以知道,第三方提供的APN配置信息版本必须与内部APN配置信息的版本相同。自此APN配置信息就存储在carriers表中了,并且通过TelephonyProvider向外提供访问接口。
【开发方案】APN 配置参数 bitmask 数据转换(Android & KaiOS) 介绍APN参数含义,说明转换映射的必要性,分析日志介绍数据转换的代码开发方案 阅读详情

相关推荐

【Telephony】APN配置及加载流程&项目实践(AOSP)

学习APN关键是学会明白apns-conf.xml文件各个参数的意思,然后熟悉TelephonyProvider是如何读取文件创建数据库的,譬如数据库表的约束、文件的读写顺序等,还有读取后的ApnSetting的二次定制以及显示(例如屏蔽xcap等)。虽然一般在项目中APN的需求很简单,就是按照客户提供的APN参数添加上配置,或者在显示屏蔽一些参数,但是项目维护的过程中APN的问题也是比较多的。

weixin_44513784的博客 5509

Android OTA升级后更新APN参数的实现

前言:最近在Android8.0的项目中遇到一个新的需求,客户在MR版本中要求我们更改APN参数,然后通过OTA升级的方式来更新APN参数,但是Android系统的设计是只有第一次刷机后开机才会走APN的初始化,并将APN添加到数据库中,OTA升级是不会触发系统去更新数据库的。   1、首先定义了一个BroadcastReceiver用于接收系统开机的广播,代码如下,注释见代码 publi...

Felix 3126

Android APN type 配置和问题

apns-conf.xml配置了不合法的type,会无法映射转换,导致dataprofile加载时空,网络请求时找不到对应APN处理业务。

。 1796

Android修改APN的配置

Andorid自身数据库中有很多默认的apn配置,如果要配置新的默认配置: 1、找到该文件:android-source/device/fsl/imx6/etc/apns-conf.xml 2、添加如下的格式的apn: <apn carrier="Thailand TRUE 3GNET" mcc="520" mnc="04" ap

hy119的博客 6797

Android 运营商与APN配置简介

运营商配置与APN配置简介

wys_yuan的博客 5407

Android MVNO APN 字段配置方法

其中Mvno Type通常有如下三种类型 :GID/SPN/IMSI1、IMSI(International Mobile Subscriber Identity):用于指定国际移动用户识别码(IMSI),这是SIM卡中的一个标识符,用于识别移动用户。2、GID(Group Identifier Level 1):用于指定组标识级别1串,用于在MVNO网络中识别用户所属的群组。3、SPN(Service Provider Name):用于指定服务提供商名称,用于在MVNO网络中标识服务提供商。

。 6529

Android APN的配置和加载_android apn 节点新增了,但是列表没更新

APN配置文件是/etc/目录的apns-conf.xml,配置的参数经过解析后,存放到数据库telephony.db的表carriers中,表的列字段都定义在Telephony.java文件的子类Carriers中,常见字段见附件1([Carriers参数定义]。roaming_protocol----漫游IP协议,有IP、IPV6、IPV4V6,不配置表示IP即IPV4。network_type_bitmask----网络类型掩码,1~20,具体意义见附录2,若不配置,mcc -----运营商国家码。

2401_86984673的博客 1052

别再到处找密钥了!手把手教你搞定Halcon 24.11/25.05的试用授权(附每月更新提醒)

本文详细介绍了Halcon 24.11/25.05试用授权的获取与配置方法,包括解密新版授权机制、快速配置指南、每月更新规律及多版本共存管理技巧。帮助开发者避免常见授权问题,提升工作效率,特别适合机器视觉领域的初学者和专业人士。

weixin_29238147的博客 1145

Android 系统APN配置详解

         这些天一直在调系统原生的Settings.apk里面APN配置的问题,在设置里面手动增加了APN配置选项,但是在界面上还是看不到。所以跟了下代码,原以为就是简单的页面显示的问题,这一跟不要紧,一下就快追到HAL层去了(NND).         首先看Settings.apk的源码,位于packages/apps/Settings/src/com/android/set...

twobrushes的专栏 1363

模拟波束赋形 vs 数字波束赋形:5G天线设计中的成本与性能权衡

本文深入剖析了5G天线设计中模拟波束赋形与数字波束赋形的核心差异,重点探讨了二者在硬件成本、功耗、网络覆盖能力和频谱效率等方面的权衡。文章指出,模拟方案成本低但灵活性有限,数字方案性能强大但代价高昂,而混合波束赋形已成为主流折中方案。决策需紧密结合具体的部署场景、性能要求和总拥有成本进行综合考量。

weixin_28432777的博客 840

Keil中搭建自动化单元测试框架Unity

前言:   虽然一些C++的自动化单元测试框架也能用来C语言单元测试,但那样我们编写C语言程序时需要符合C++的标准,这样有一些C的特性是无法使用的,限制C的特性使用不太好,于是找了一个全部用C实现的自动化测试框架。Unity是一个简单且直接的自动化单元测试框架,它由很少的几个文件构成。 搭建环境:   1.从github上下载最新版本的Unity源码,下载链接:https://github...

程序员的自我修炼 3899

Android系统APN配置详解

Android 系统APN配置详解        这些天一直在调系统原生的Settings.apk里面APN配置的问题,在设置里面手动增加了APN配置选项,但是在界面上还是看不到。所以跟了下代码,原以为就是简单的页面显示的问题,这一跟不要紧,一下就快追到HAL层去了(NND).         首先看Settings.apk的源码,位于packages/apps/Settings/src/co

漫步云端 8308

【知识分享】单端到混合S参数转换指南

信号完整性(SI)工程师几乎总是必须使用S参数,因为许多的高速接口和行业标准都正在转向串行链路架构,并使用基于S参数测量的频域限制指标,了解其工作过程将会很有意义。

一只豌豆象的博客 1577

Android APN 配置

转自:(http://blog.csdn.net/yangwen123/article/details/10526871)如果要支持多个运营商的支持就要在apns-conf.xml中加入。APN概念APN(Access Point Name),即“接入点名称”,用来标识GPRS的业务种类,目前分为两大类:CMWAP(通过GPRS访问WAP业务)、CMNET(除了WAP以外的服务目前都用CMNET,比

Simon_Crystin的博客 4125

YOLOv8性能突破:DySample超轻量动态上采样算子的创新应用与实现【附保姆级代码】

YOLOv8(You Only Look Once Version 8)作为YOLO系列模型的最新版本,延续了高效、准确的目标检测优势。其基础结构包含了骨干网络(Backbone)、检测头(Head)、以及特征融合层(Neck)。在特征融合阶段,YOLOv8需要对不同尺度的特征图进行上采样,以便将低分辨率的特征与高分辨率的特征进行融合。传统的上采样操作多使用插值(如双线性插值)或固定卷积,而这些方法可能无法很好地适应复杂的上下文信息。

一键难忘的博客 3120

基于STM32设计的心率脉搏测量仪(项目资料ID:9)

本设计基于STM32F103单片机开发了一款便携式心率脉搏测量仪,通过光电传感器采集脉搏信号,经放大(约1200倍)、滤波(低通及四阶低通滤波)、比较及偏置电压调理后,由STM32进行ADC采样与数据处理。硬件采用Altium Designer设计,包含信号调理电路(限定心率范围43.4-800次/分钟)及电源管理模块;软件基于STM32CubeMX开发,利用队列存储和时间间隔平均算法优化精度,实现多终端显示(OLED实时心率/动画、MATLAB波形分析、蓝牙传输至手机)。系统支持自动启停(检测脉搏启

以培养嵌入式工程师为己任 1万+

Android系统APN配置具体解释

Android 系统APN配置具体解释 这些天一直在调系统原生的Settings.apk里面APN配置的问题。在设置里面手动添加了APN配置选项。可是在界面上还是看不到。所以跟了下代码。原以为就是简单的页面显示的问题。这一跟不要紧。一下就快追到HAL层去了(NND). 首先看Settings.apk的源代码,位于packages/apps/Setting...

weixin_30338481的博客 263

太空安全卫士:基于YOLOv5的空间态势感知系统(实现轨道碰撞预警与太空环境保护)

做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护宇宙安全”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了航天监测的哪些痛点、YOLOv5在太空目标检测中的性能优势、系统未来能怎么优化(比如对接航天监测网络、实现实时轨道预测)。未来,这个系统还能往“更智能”的方向发展:比如结合轨道计算预测碰撞风险、开发移动端APP让天文爱好者参与太空垃圾上报、在航天任务中实现全自动避障决策……想象空间很大。

m0_71589036的博客 90

展锐Android13配置默认APN

展锐Android13配置默认APN

oh_my_god的专栏 550

Arduino读取串口接收到的数据并发送数据

Arduino读取串口接收到的数据并发送数据 源程序: void setup() { Serial.begin(115200); } void loop() { String comdata ; while (Serial.available() > 0) { comdata += char(Serial.read()); delay(2); } if (comdata.length() > 0) { Serial.print("串口接收到的数据:"); Serial.println(comd

perseverance51博客 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: WHAT IS CTA
下一篇: Eclipse中跟踪调试Android Framework源代码
killmice
博客等级 码龄14年 119粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值