description: “Android 16 APN/DataProfile 数据配置架构文档,涵盖 ApnSetting 数据库加载、DataProfile 三层结构(ApnSetting + TrafficDescriptor + UrspRule)、DataProfileManager 的 APN 数据库监听与缓存、DataConfigManager 的运营商配置集中管理、企业 APN (DPC)、初始附着 (InitialAttach) APN 策略、基于 TrafficDescriptor 的数据网络映射等完整数据配置机制。”
1. 概述
APN (Access Point Name) 是手机建立数据连接的核心配置,告诉 Modem 如何接入运营商的分组数据网络。Android 16 使用三层模型(ApnSetting → DataProfile → TrafficDescriptor)来管理这些配置,通过 DataProfileManager 统一加载、缓存和分发。
1.1 核心组件
| 组件 | 文件 | 职责 |
|---|---|---|
DataProfileManager |
data/DataProfileManager.java |
APN 配置总管:加载、缓存、监听变化 |
DataConfigManager |
data/DataConfigManager.java |
数据配置中心:运营商配置集中管理 |
DataNetworkController |
data/DataNetworkController.java |
数据网络控制器,消费 DataProfile |
DataServiceManager |
data/DataServiceManager.java |
WWAN Data Service 管理器 |
ApnSetting |
telephony/data/ApnSetting.java |
单条 APN 配置(名称、类型、协议等) |
DataProfile |
telephony/data/DataProfile.java |
完整数据配置封装(ApnSetting + TrafficDescriptor) |
TrafficDescriptor |
telephony/data/TrafficDescriptor.java |
数据流标识符(如 DNN/APN 名称) |
Telephony.Carriers |
provider/Telephony.java |
APN 数据库 ContentProvider URI 定义 |
2. DataProfile 三层模型
2.1 ApnSetting — 基础 APN 配置
// ApnSetting.java — 单条 APN 的所有配置参数
public class ApnSetting implements Parcelable {
private final String mApnName; // APN 名称,如 "cmnet"、"ims"
private final String mProxyAddress; // 代理地址
private final int mProxyPort; // 代理端口
private final String mMmsc; // MMSC 地址
private final String mMmsProxyAddress; // MMS 代理
private final int mMmsProxyPort; // MMS 代理端口
private final int mApnTypeBitmask; // APN 类型位图
private final int mAuthType; // 认证类型 (PAP/CHAP/NONE)
private final String mUser; // 用户名
private final String mPassword; // 密码
private final int mProtocol; // 协议 (IPv4/IPv6/IPv4v6)
private final int mRoamingProtocol; // 漫游协议
private final int mMvnoType; // MVNO 类型
private final Uri mUrspRulePrecedence; // URSP 规则优先级
private final int mNetworkTypeBitmask; // 适用网络类型位图
private final int mProfileId; // Profile ID
private final boolean mPersistent; // 是否持久化
private final boolean mCarrierEnabled; // 运营商是否启用
}
2.2 APN 类型位图
// ApnSetting.java — APN 类型位图定义
public static final int TYPE_DEFAULT = 1 << 0; // 0x01 — Internet
public static final int TYPE_MMS = 1 << 1; // 0x02 — MMS
public static final int TYPE_SUPL = 1 << 2; // 0x04 — SUPL (定位)
public static final int TYPE_DUN = 1 << 3; // 0x08 — 网络共享
public static final int TYPE_HIPRI = 1 << 4; // 0x10 — 高优先级
public static final int TYPE_FOTA = 1 << 5; // 0x20 — OTA 固件升级
public static final int TYPE_IMS = 1 << 6; // 0x40 — IMS
public static final int TYPE_CBS = 1 << 7; // 0x80 — 小区广播
public static final int TYPE_IA = 1 << 8; // 0x100 — 初始附着(InitialAttach)
public static final int TYPE_EMERGENCY = 1 << 9; // 0x200 — 紧急
public static final int TYPE_MCX = 1 << 10; // 0x400 — Mission Critical
public static final int TYPE_XCAP = 1 << 11; // 0x800 — XCAP (补充服务配置)
public static final int TYPE_ENTERPRISE = 1 << 12; // 0x1000 — 企业 APN
public static final int TYPE_VSIM = 1 << 13; // 0x2000 — 虚拟 SIM
public static final int TYPE_BIP = 1 << 14; // 0x4000 — Bearer Independent Protocol
2.3 DataProfile — 完整数据配置封装
// DataProfile.java — 将 ApnSetting 包装为 Modem 可识别的完整配置
public class DataProfile implements Parcelable {
private final int mProfileId;
private final ApnSetting mApnSetting; // APN 配置
private final @Nullable TrafficDescriptor mTrafficDescriptor; // 数据流标识
private final @Nullable List<UrspRule> mUrspRules; // URSP 路由规则
private final boolean mPreferred; // 是否为首选
private final boolean mPersistent; // 是否持久化
// Builder 模式创建
public static final class Builder {
private ApnSetting mApnSetting;
private TrafficDescriptor mTrafficDescriptor;
private List<UrspRule
274



被折叠的 条评论
为什么被折叠?



