码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Android APN 参数数据库设计和代码实现


    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)

    1. private static final int SOURCE_TYPE_INDEX = 26;//自定义新增数据库字段索引号
    2. // the source type for apn
    3. public static final int SOURCE_TYPE_DEFAULT = 0; // the default configured by apns-config.xml
    4. public static final int SOURCE_TYPE_USER_EDIT = 1; // from user editing
    5. private int mSourceType = SOURCE_TYPE_DEFAULT;//初始化默认为预置类型
    6. /**
    7. * Standard projection for the interesting columns of a normal note.
    8. */
    9. private static final String[] sProjection = new String[] {
    10. Telephony.Carriers._ID, // 0
    11. Telephony.Carriers.NAME, // 1
    12. Telephony.Carriers.APN, // 2
    13. Telephony.Carriers.PROXY, // 3
    14. Telephony.Carriers.PORT, // 4
    15. Telephony.Carriers.USER, // 5
    16. Telephony.Carriers.SERVER, // 6
    17. Telephony.Carriers.PASSWORD, // 7
    18. Telephony.Carriers.MMSC, // 8
    19. Telephony.Carriers.MCC, // 9
    20. Telephony.Carriers.MNC, // 10
    21. Telephony.Carriers.NUMERIC, // 11
    22. Telephony.Carriers.MMSPROXY, // 12
    23. Telephony.Carriers.MMSPORT, // 13
    24. Telephony.Carriers.AUTH_TYPE, // 14
    25. Telephony.Carriers.TYPE, // 15
    26. Telephony.Carriers.PROTOCOL, // 16
    27. Telephony.Carriers.CARRIER_ENABLED, // 17
    28. Telephony.Carriers.BEARER, // 18
    29. Telephony.Carriers.BEARER_BITMASK, // 19
    30. Telephony.Carriers.ROAMING_PROTOCOL, // 20
    31. Telephony.Carriers.MVNO_TYPE, // 21
    32. Telephony.Carriers.MVNO_MATCH_DATA, // 22
    33. Telephony.Carriers.EDITED_STATUS, // 23
    34. Telephony.Carriers.USER_EDITABLE, // 24
    35. Telephony.Carriers.CARRIER_ID, // 25
    36. SOURCE_TYPE //自定义新增字段,MTK inner suppport
    37. };
    38. void fillUI(boolean firstTime) {
    39. //从数据库更新APN来源类型
    40. mSourceType = mApnData.getInteger(SOURCE_TYPE_INDEX);
    41. }

    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)

    1. private static ApnSettings getApnSettingsFromCursor(Cursor cursor, String requestId)
    2. throws ApnException {
    3. // Default proxy port to 80
    4. int proxyPort = 80;
    5. //...
    6. if (!TextUtils.isEmpty(proxyAddress)) {
    7. proxyAddress = Inet4AddressUtils.trimAddressZeros(proxyAddress);
    8. final String portString =
    9. trimWithNullCheck(cursor.getString(COLUMN_MMSPORT));
    10. if (!TextUtils.isEmpty(portString)) {
    11. try {
    12. proxyPort = Integer.parseInt(portString);
    13. } catch (NumberFormatException e) {
    14. LogUtil.e(requestId, "Invalid port " + portString + ", use 80");
    15. }
    16. }
    17. }
    18. return new ApnSettings(
    19. mmscUrl, proxyAddress, proxyPort, getDebugText(cursor));
    20. }

  • 相关阅读:
    STM8S项目创建(STVD创建)---使用 COSMIC 创建 C 语言项目
    大型语言模型:DistilBERT — 更小、更快、更便宜、更轻
    【Linux基础】第31讲 Linux用户和用户组权限控制命令(三)
    Who will wash the dishes Privacy Policy
    .NET与C#未来大流行是必然趋势
    集成学习 #数据挖掘 #Python
    linux主程序链接多个动态库时,若多个动态库之间存在相同的函数,则也正常调用
    微模块-前端业务模块化探索,拆解巨石应用的又一利器
    第三章 神经网络——什么是神经网路&激活函数&3层神经网络的简单实现&手写数字识别
    量子力学的应用:量子通信和量子感应
  • 原文地址:https://blog.csdn.net/qq_38666896/article/details/134527924
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号