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)

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));
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值