Android APN 参数数据库设计和代码实现

news2025/1/16 2:45:12

Android  U 网页代码:/ - OpenGrok cross reference for / (aospxref.com)

字段参数介绍

实体对象 ApnSetting

ApnSetting.java - OpenGrok cross reference for /frameworks/base/telephony/java/android/telephony/data/ApnSetting.java (aospxref.com)

An Access Point Name (APN) configuration for a carrier data connection.

一个运营商数据连接的接入点名称(APN)配置。

界面Projection

ApnEditor.java - OpenGrok cross reference for /packages/apps/Settings/src/com/android/settings/network/apn/ApnEditor.java (aospxref.com)

客制化开发举例:sourceType字段标记APN来源(预置、服务器下发或用户添加 )

源码实现:ApnEditor.java - OpenGrok cross reference for /packages/apps/Settings/src/com/android/settings/network/apn/ApnEditor.java (aospxref.com)

private static final int SOURCE_TYPE_INDEX = 26;//自定义新增数据库字段索引号

// the source type for apn
public static final int SOURCE_TYPE_DEFAULT = 0; // the default configured by apns-config.xml
public static final int SOURCE_TYPE_USER_EDIT = 1; // from user editing

private int mSourceType = SOURCE_TYPE_DEFAULT;//初始化默认为预置类型

/**
 * Standard projection for the interesting columns of a normal note.
 */
private static final String[] sProjection = new String[] {
        Telephony.Carriers._ID,     // 0
        Telephony.Carriers.NAME,    // 1
        Telephony.Carriers.APN,     // 2
        Telephony.Carriers.PROXY,   // 3
        Telephony.Carriers.PORT,    // 4
        Telephony.Carriers.USER,    // 5
        Telephony.Carriers.SERVER,  // 6
        Telephony.Carriers.PASSWORD, // 7
        Telephony.Carriers.MMSC, // 8
        Telephony.Carriers.MCC, // 9
        Telephony.Carriers.MNC, // 10
        Telephony.Carriers.NUMERIC, // 11
        Telephony.Carriers.MMSPROXY, // 12
        Telephony.Carriers.MMSPORT, // 13
        Telephony.Carriers.AUTH_TYPE, // 14
        Telephony.Carriers.TYPE, // 15
        Telephony.Carriers.PROTOCOL, // 16
        Telephony.Carriers.CARRIER_ENABLED, // 17
        Telephony.Carriers.BEARER, // 18
        Telephony.Carriers.BEARER_BITMASK, // 19
        Telephony.Carriers.ROAMING_PROTOCOL, // 20
        Telephony.Carriers.MVNO_TYPE,   // 21
        Telephony.Carriers.MVNO_MATCH_DATA,  // 22
        Telephony.Carriers.EDITED_STATUS,   // 23
        Telephony.Carriers.USER_EDITABLE,   // 24
        Telephony.Carriers.CARRIER_ID,       // 25
        SOURCE_TYPE    //自定义新增字段,MTK inner suppport
};

void fillUI(boolean firstTime) {
    //从数据库更新APN来源类型
    mSourceType = mApnData.getInteger(SOURCE_TYPE_INDEX);
}

telephony.db字段

开机Android TelephonyProvider会将apns-conf.xml APN配置信息 load到数据库telephony.db名为carrier的表中,可以用SQLite工具可视化。

手机存储目录:data/user_de/0/com.android.providers.telephony,在子文件夹databases

RecNoFieldNameSQLTypeDefaultValue备注
1_idINTEGER
2nameTEXT''必须
3numericTEXT''

=mcc+mnc

4mccTEXT''必须
5mncTEXT''必须
6classTEXT''运营商需求
7apn_sourceINTEGER-1
8modify_apn_name_idINTEGER-1
9carrier_idINTEGER-1
10apnTEXT''必须
11userTEXT''
12serverTEXT''
13passwordTEXT''
14proxyTEXT''
15portTEXT''
16mmsproxyTEXT''
17mmsportTEXT''
18mmscTEXT''
19authtypeINTEGER-1
20typeTEXT''
21currentINTEGER
22sourcetypeINTEGER0
23protocolTEXTIP
24roaming_protocolTEXTIP
25carrier_enabledBOOLEAN1
26bearerINTEGER0
27bearer_bitmaskINTEGER0
28network_type_bitmaskINTEGER0
29lingering_network_type_bitmaskINTEGER0
30mvno_typeTEXT''
31mvno_match_dataTEXT''
32sub_idINTEGER-1指明归属的卡,来源subscription
33profile_idINTEGER0
34modem_cognitiveBOOLEAN0
35max_connsINTEGER0
36wait_timeINTEGER0
37max_conns_timeINTEGER0
38mtuINTEGER0
39mtu_v4INTEGER0
40mtu_v6INTEGER0
41editedINTEGER0
42user_visibleBOOLEAN1
43user_editableBOOLEAN1
44owned_byINTEGER1APN归属者,0或1,基本都是1.
45apn_set_idINTEGER0APN类型集合的id,功能基本都没用到
46skip_464xlatINTEGER-1

464xLAT上层有个开关会设置下去给MD,默认是开的。

参考NetworkAgentConfig.java 介绍:

Set to skip 464xlat. This means the device will treat the network as IPv6-only and

will not attempt to detect a NAT64 via RFC 7050 DNS lookups.

47always_onINTEGER0

相关默认值

在MMS模块有定义proxy port默认值是80(在APN没有配置的情况下),代码实现如下:

ApnSettings.java - OpenGrok cross reference for /packages/services/Mms/src/com/android/mms/service/ApnSettings.java (aospxref.com)

private static ApnSettings getApnSettingsFromCursor(Cursor cursor, String requestId)
        throws ApnException {
    // Default proxy port to 80
    int proxyPort = 80;
    //...
    if (!TextUtils.isEmpty(proxyAddress)) {
         proxyAddress = Inet4AddressUtils.trimAddressZeros(proxyAddress);
         final String portString =
                 trimWithNullCheck(cursor.getString(COLUMN_MMSPORT));
         if (!TextUtils.isEmpty(portString)) {
             try {
                 proxyPort = Integer.parseInt(portString);
             } catch (NumberFormatException e) {
                 LogUtil.e(requestId, "Invalid port " + portString + ", use 80");
             }
         }
     }
     return new ApnSettings(
             mmscUrl, proxyAddress, proxyPort, getDebugText(cursor));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1239894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你不知道的库:库的种类,作用和加载方式

你不知道的库:库的种类,作用和加载方式 📟作者主页:慢热的陕西人 🌴专栏链接:Linux 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客…

Linux 局域网传输工具LANDrop安装

Linux 局域网传输工具LANDrop安装 🥙下载🌭解压🥪运行 🥙下载 官网下载 或网盘 🌭解压 使用以下命令解压获得squashfs-root文件夹 ./LANDrop-latest-linux.AppImage --appimage-extract🥪运行 进入squ…

分布式锁3: zk实现分布式锁

一 zk 实现分布式锁 1.1 zk分布式操作命令 1.指令: ls / get /zookeeper create /aa "test" delete /aa set /aa "test1" 2..znode节点类型: 永久节点:create /pa…

028 - STM32学习笔记 - ADC结构体学习(二)

028 - STM32学习笔记 - 结构体学习(二) 上节对ADC基础知识进行了学习,这节在了解一下ADC相关的结构体。 一、ADC初始化结构体 在标准库函数中基本上对于外设都有一个初始化结构体xx_InitTypeDef(其中xx为外设名,例如…

从mysql源码编译出相应的库和可执行文件及搭建mysql服务端

目录 1. 问题的提出 2. 源码下载 3. 升级或安装某些前置软件 3.1. 升级CMake 3.2. 升级gcc、g 4. 安装依赖库 4.1. 安装OpenSSL 4.2. 安装Curses 4.3. 安装pkg-config 5. 编译、安装 6. 编译结果、配置 7. 编译错误处理 7.1. 错误1 7.2. 错误2 8. 搭建mysql数…

FindMy技术用于充电宝

充电宝是一种便捷的充电器,方便个人随身携带,能够自行储备电能,为主流电子设备提供充电服务。它广泛应用于没有外部电源供应的场所,例如旅行、户外活动或紧急情况下,为用户的手持设备提供持续的电力支持,确…

C语言--数组与指针--打印字符串的n种方式

一.知识背景 一维数组名的含义 arr一般表示数组的起始地址(除了两种例外) 1.在定义数组的同一个函数中(不是形参),求sizeof(arr),求整个数组的字节数 2.在定义数组的同一个函数中(不是形参),&arr1,加整个数组的大小 (经常考试) 3.除上面以外,arr都表…

第四代智能井盖传感器:智能井盖位移怎么进行监测

井盖是城市基础设施的一个重要组成部分,若井盖出现移位等现象,可能会对路过的车辆和行人造成潜在危险。特别是那些含有甲烷气体的井盖,一旦气体超过阈值且被意外踩踏,可能会导致气体的释放,这便会引发一系列安全事故&a…

给定一个非严格递增排列的有序数组,删除数组中的重复项

实例要求:1、给定一个非严格递增排列的有序数组 nums ;2、原地 删除重复出现的元素,使每个元素 只出现一次 ;3、返回删除后数组的新长度;4、元素的 相对顺序 应该保持 一致 ;5、然后返回 nums 中唯一元素的…

Unsupervised MVS论文笔记

Unsupervised MVS论文笔记 摘要1 引言2 相关工作3 实现方法 Tejas Khot and Shubham Agrawal and Shubham Tulsiani and Christoph Mertz and Simon Lucey and Martial Hebert. Tejas Khot and Shubham Agrawal and Shubham Tulsiani and Christoph Mertz and Simon Lucey and …

二十二、数组(4)

本章概要 随机生成泛型和基本数组 随机生成 我们可以按照 Count.java 的结构创建一个生成随机值的工具: Rand.java import java.util.*; import java.util.function.*;import static com.example.test.ConvertTo.primitive;public interface Rand {int MOD 10_0…

详解自动化之单元测试工具Junit

目录 1.注解 1.1 Test 1.2 BeforeEach 1.3 BeforeAll 1.4 AfterEach 1.5 AfterAll 2. 用例的执行顺序 通过 order() 注解来排序 3. 参数化 3.1 单参数 3.2 多参数 3.3 多参数(从第三方csv文件读取数据源) 3.4 动态参数ParameterizedTest MethodSource() 4. 测试…

数字IC后端设计利器 - 《Innovus的基本使用流程和命令》

Innovus作为数字后端工具的后起之秀,在先进工艺下已经取得了令人瞩目的成就。其在Run time上的优势令人刮目,在timing、DRC、IR-drop上的结果更是让人竖起大拇指。 数字IC后端工程师学习Cadence公司的Innovus工具非常重要,因为Innovus是一款…

YOLOv8改进实战 | 更换主干网络Backbone(六)之轻量化模型VanillaNet进阶篇

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

封面从这里取好啦

文章目录 前端NPMViteNode.js 后端JavaMavenPython 数据库算法 前端 NPM Vite Node.js 后端 Java Maven Python 数据库 算法

常见面试题-Redis持久化策略

谈谈Redis 的持久化策略? 参考文章: Redis 持久化机制演进与百度智能云的实践 Redis的确是将数据存储在内存的,但是也会有相关的持久化机制将内存持久化备份到磁盘,以便于重启时数据能够重新恢复到内存中,避免数据丢…

反编译-ApkTool

ApkTool下载地址: Apktool | ApktoolA tool for reverse engineering Android apk fileshttps://apktool.org/ 1、使用 apktool 解包 执行 java -jar apktool_2.4.1.jar d demo.apk -o demo 命令 java -jar apktool_2.4.1.jar d demo.apk -o demo 其中 d 后面是…

嵌入式基础知识学习:Flash、EEPROM、RAM、ROM

https://blog.csdn.net/y673533511/article/details/87913989 FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦出可编程(EEPROM) 的性能,还不会断电丢失数据同时可以快速读取数据 (NVRAM 的优势),U 盘和MP3 里用的…

JSP:Javabean

起初,JavaBean的目的是为了将可以重复使用的代码进行打包,在传统的应用中,JavaBean主要用于实现一些可视化界面,如一个窗体、按钮、文本框等,这样的JavaBean称之可视化的JavaBean。 随着技术的不断发展与项目的需求&am…

MySQL 事务的底层原理和 MVCC(一)

在事务的实现机制上,MySQL 采用的是 WAL(Write-ahead logging,预写式日志)机制来实现的。 在使用 WAL 的系统中,所有的修改都先被写入到日志中,然后再被应用到系统中。通常包含 redo 和 undo 两部分信息。 …