Telephony 框架核心类及其作用
一、系统初始化与管理
1. PhoneFactory
- 包路径:
com.android.internal.telephony.PhoneFactory - 作用:Phone 实例的工厂类和管理器
- 职责:
- 系统启动时创建所有 Phone 实例
- 创建和管理 RIL、UiccController、SubscriptionManagerService 等核心组件
- 提供全局访问接口获取 Phone 实例
- 处理多 SIM 卡配置变化
- 关键方法:
makeDefaultPhones()- 创建默认 Phone 实例getPhone(int phoneId)- 获取指定的 Phone 实例getPhones()- 获取所有 Phone 实例
2. PhoneGlobals
- 包路径:
com.android.phone.PhoneGlobals - 作用:Phone 应用的全局状态管理器
- 职责:
- Phone 应用进程的入口和上下文
- 初始化 Telephony 框架(调用 PhoneFactory)
- 初始化 IMS 服务(ImsResolver)
- 管理通话通知、呼叫管理器等 UI 相关组件
- 注册系统广播监听器
- 关键组件:
- CallManager - 通话管理
- NotificationMgr - 通知管理
- PhoneInterfaceManager - Binder 服务
- ImsRcsController - IMS RCS 控制器
3. TelephonyComponentFactory
- 包路径:
com.android.internal.telephony.TelephonyComponentFactory - 作用:组件工厂,支持依赖注入
- 职责:
- 创建各种 Telephony 组件
- 支持通过 XML 配置注入自定义实现
- OEM 可以通过配置替换默认实现
- 创建的组件:
- GsmCdmaCallTracker
- ServiceStateTracker
- NitzStateMachine
- 等等
二、RIL 与 Modem 通信
4. RIL (Radio Interface Layer)
- 包路径:
com.android.internal.telephony.RIL - 作用:Telephony Framework 与 Modem HAL 通信的桥梁
- 职责:
- 实现 CommandsInterface 接口
- 管理与 Modem HAL 的连接(HIDL/AIDL)
- 发送请求到 Modem(Request)
- 接收 Modem 响应(Response)
- 处理 Modem 主动上报(Indication/UNSOL)
- 管理请求队列和序列号
- 关键成员:
mRequestList- 待处理的请求队列RadioServiceProxy家族 - 按服务分类的代理RadioResponse- 响应处理器RadioIndication- 主动上报处理器
5. RILRequest
- 包路径:
com.android.internal.telephony.RILRequest - 作用:封装 RIL 请求
- 职责:
- 封装请求 ID、序列号、回调 Message
- 管理 WakeLock
- 记录请求时间用于超时检测
- 关键字段:
mSerial- 请求序列号mRequest- 请求类型(如 RIL_REQUEST_DIAL)mResult- 回调 Message
6. RadioServiceProxy 家族
- 包路径:
com.android.internal.telephony.RadioXxxProxy - 作用:按服务类型分离的 RIL 代理
- 类型:
- RadioVoiceProxy - 语音服务(拨号、接听、挂断)
- RadioDataProxy - 数据服务(数据连接、APN 配置)
- RadioNetworkProxy - 网络服务(网络注册、信号强度)
- RadioSimProxy - SIM 卡服务(SIM 状态、PIN 操作)
- RadioMessagingProxy - 消息服务(短信收发)
- RadioModemProxy - Modem 控制(Radio 开关、重启)
7. RadioResponse / RadioIndication
- 包路径:
com.android.internal.telephony.RadioResponse/RadioIndication - 作用:处理 Modem HAL 的响应和主动上报
- 职责:
- RadioResponse - 处理请求响应,解析结果,触发回调
- RadioIndication - 处理 UNSOL 消息,通知注册的监听器
- 关键特征:
- 按服务类型分类(Voice/Data/Network/Sim/Messaging/Modem)
- 线程安全,运行在 RIL Handler 线程
三、Phone 核心
8. Phone(抽象基类)
- 包路径:
com.android.internal.telephony.Phone - 作用:Phone 的抽象接口,定义所有 Phone 行为
- 职责:
- 定义语音通话、数据连接、短信等接口
- 管理 Phone 相关组件(ServiceStateTracker、CallTracker 等)
- 提供状态查询接口
- 实现 Handler,处理异步事件
- 关键接口:
dial()- 拨号acceptCall()- 接听getServiceState()- 获取服务状态getDataNetworkController()- 获取数据网络控制器
9. GsmCdmaPhone
- 包路径:
com.android.internal.telephony.GsmCdmaPhone - 作用:Phone 的具体实现,支持 GSM/CDMA/LTE 网络
- 职责:
- 处理 CS 域(电路交换)业务
- 管理传统语音通话
- 管理 PS 域(分组交换)数据连接
- 处理短信收发
- 与 ImsPhone 协作处理 IMS 业务
- 核心组件:
mCT(GsmCdmaCallTracker) - 呼叫跟踪器mSST(ServiceStateTracker) - 服务状态跟踪器mDNC(DataNetworkController) - 数据网络控制器mSmsDispatcher(SMSDispatcher) - 短信分发器
10. ImsPhone
- 包路径:
com.android.internal.telephony.imsphone.ImsPhone - 作用:处理 IMS 域业务(VoLTE、VoWiFi、ViLTE)
- 职责:
- 管理 IMS 注册状态
- 处理 IMS 呼叫(VoLTE/VoWiFi)
- 处理 IMS 短信
- 通过 ImsManager 与 IMS 服务交互
- 核心组件:
mCT(ImsPhoneCallTracker) - IMS 呼叫跟踪器mImsManager- IMS 服务管理器
四、网络注册与服务状态
11. ServiceStateTracker
- 包路径:
com.android.internal.telephony.ServiceStateTracker - 作用:管理和跟踪网络注册状态
- 职责:
- 轮询和监听网络状态变化
- 从 Modem 获取注册信息(CS/PS 域)
- 维护 ServiceState 对象
- 处理网络注册、漫游、RAT 变化
- 更新运营商信息和 SPN 显示
- 通知状态变化给其他模块
- 关键方法:
pollState()- 触发状态轮询pollStateDone()- 处理轮询结果handlePollStateResult()- 处理各项响应
- 关键成员:
mSS- 当前 ServiceStatemNewSS- 新获取的 ServiceStatemRegStateManagers- 网络注册管理器
12. ServiceState
- 包路径:
android.telephony.ServiceState - 作用:表示设备的网络服务状态
- 职责:
- 存储语音/数据注册状态
- 存储运营商信息(PLMN、名称)
- 存储 RAT(无线接入技术)类型
- 存储漫游状态
- 存储多个 NetworkRegistrationInfo
- 关键字段:
- Voice/Data registration state
- Operator numeric/alpha
- Roaming indicator
- Network type (2G/3G/4G/5G)
13. NetworkRegistrationInfo
- 包路径:
android.telephony.NetworkRegistrationInfo - 作用:表示特定域和传输类型的注册信息
- 职责:
- 区分 CS/PS 域
- 区分 WWAN/WLAN 传输
- 存储详细的注册状态和接入技术
- 存储小区信息(CellIdentity)
- 关键字段:
- Domain (CS/PS)
- Transport Type (WWAN/WLAN)
- Registration State
- Access Network Technology
14. NetworkRegistrationManager
- 包路径:
com.android.internal.telephony.NetworkRegistrationManager - 作用:ServiceStateTracker 与底层 NetworkService 的中间层
- 职责:
- 绑定 NetworkService
- 请求网络注册信息
- 监听注册状态变化
- 转发给 ServiceStateTracker
五、呼叫管理
15. CallTracker(抽象基类)
- 包路径:
com.android.internal.telephony.CallTracker - 作用:呼叫状态跟踪的抽象基类
- 职责:
- 管理 Call 对象(前台/后台/来电)
- 处理呼叫状态变化
- 实现状态机模式
16. GsmCdmaCallTracker
- 包路径:
com.android.internal.telephony.GsmCdmaCallTracker - 作用:管理 CS 域(传统)呼叫
- 职责:
- 发起语音呼叫(dial)
- 接听来电(acceptCall)
- 挂断通话(hangup)
- 轮询呼叫状态(pollCalls)
- 管理多路通话(hold、switch、conference)
- 关键成员:
mForegroundCall- 前台呼叫mBackgroundCall- 后台呼叫(保持)mRingingCall- 来电mConnections- 连接数组
17. ImsPhoneCallTracker
- 包路径:
com.android.internal.telephony.imsphone.ImsPhoneCallTracker - 作用:管理 IMS 域呼叫(VoLTE/VoWiFi)
- 职责:
- 通过 ImsManager 发起 IMS 呼叫
- 处理 IMS 呼叫状态变化
- 处理 SRVCC 切换(IMS → CS)
- 管理视频通话
- 关键成员:
mImsManager- IMS 服务管理器mImsCall- IMS 呼叫对象
18. Call
- 包路径:
com.android.internal.telephony.Call - 作用:表示一个呼叫(可包含多个连接)
- 职责:
- 管理多个 Connection
- 维护呼叫状态(IDLE、ACTIVE、HOLDING、DIALING 等)
- 提供呼叫控制接口
- 状态:
- IDLE、ACTIVE、HOLDING、DIALING、ALERTING、INCOMING、WAITING、DISCONNECTED、DISCONNECTING
19. Connection
- 包路径:
com.android.internal.telephony.Connection - 作用:表示单个通话连接
- 职责:
- 存储通话信息(号码、地址、时长)
- 管理连接状态
- 处理 DTMF
- 管理音频状态
20. CallManager
- 包路径:
com.android.internal.telephony.CallManager - 作用:统一管理多个 Phone 的呼叫
- 职责:
- 聚合所有 Phone 的呼叫状态
- 提供统一的呼叫控制接口
- 处理多卡呼叫场景
六、数据连接管理
21. DataNetworkController
- 包路径:
com.android.internal.telephony.data.DataNetworkController - 作用:统筹管理所有数据网络连接
- 职责:
- 评估网络请求
- 创建和管理 DataNetwork 实例
- 处理数据开关状态变化
- 处理漫游数据限制
- 协调多个 PDN 连接
- 关键方法:
addNetworkRequest()- 添加网络请求removeNetworkRequest()- 移除网络请求evaluateDataNetworkRequest()- 评估并建立连接
22. DataNetwork
- 包路径:
com.android.internal.telephony.data.DataNetwork - 作用:表示单个 PDN(数据网络)连接
- 职责:
- 实现状态机管理连接生命周期
- 请求 DataService 建立连接
- 管理网络能力(Capabilities)
- 处理切换(Handover)
- 通知连接状态变化
- 状态机:
- IDLE → CONNECTING → CONNECTED → HANDOVER → DISCONNECTING → DISCONNECTED
- 关键成员:
mDataProfile- APN 配置mNetworkAgent- 与 ConnectivityService 通信mDataServiceManager- 数据服务管理器
23. DataProfileManager
- 包路径:
com.android.internal.telephony.data.DataProfileManager - 作用:管理 APN 配置
- 职责:
- 从数据库加载 APN 配置
- 管理首选 APN(Preferred APN)
- 管理初始附着 APN(Initial Attach APN)
- 下发 APN 配置到 Modem
- 处理 APN 数据库变化
- 关键方法:
getDataProfileForNetworkRequest()- 为网络请求选择 APNsetPreferredDataProfile()- 设置首选 APNupdateDataProfiles()- 更新 APN 列表
24. ApnSetting
- 包路径:
android.telephony.data.ApnSetting - 作用:表示单个 APN 配置
- 职责:
- 存储 APN 详细信息(名称、类型、认证方式等)
- 提供 APN 比较和匹配逻辑
- 关键字段:
- APN name
- APN types (default, mms, supl, dun, etc.)
- MMSC, MMS proxy/port
- Authentication type
25. TelephonyNetworkFactory
- 包路径:
com.android.internal.telephony.data.TelephonyNetworkFactory - 作用:响应 ConnectivityService 的网络请求
- 职责:
- 监听 ConnectivityService 的网络请求
- 评估请求并触发数据连接建立
- 向 ConnectivityService 报告网络可用性
- 工作流程:
- ConnectivityService 发出请求 → TelephonyNetworkFactory 评估 → DataNetworkController 建立连接
26. PhoneSwitcher
- 包路径:
com.android.internal.telephony.PhoneSwitcher - 作用:管理默认数据卡(DDS)切换
- 职责:
- 根据网络请求决定使用哪张 SIM 卡
- 处理自动数据切换(Auto Data Switch)
- 处理紧急呼叫时的临时切换
- 协调多卡数据能力
- 关键方法:
onEvaluate()- 评估并选择数据卡getPreferredDataPhoneId()- 获取首选数据卡 ID
七、SIM 卡管理
27. UiccController
- 包路径:
com.android.internal.telephony.uicc.UiccController - 作用:UICC/SIM 卡的顶层管理器
- 职责:
- 管理所有 SIM 卡槽(UiccSlot)
- 处理 SIM 卡状态变化
- 查询 SIM 卡信息
- 管理 eSIM 和物理 SIM
- 发送 SIM 状态广播
- 类层次:
- UiccController → UiccSlot → UiccCard → UiccPort → UiccProfile → UiccCardApplication → IccRecords
28. UiccSlot
- 包路径:
com.android.internal.telephony.uicc.UiccSlot - 作用:表示物理 SIM 卡槽
- 职责:
- 管理卡槽状态(有卡/无卡)
- 支持多端口(MEP - Multiple Enabled Profiles)
- 管理 UiccCard
29. UiccCard
- 包路径:
com.android.internal.telephony.uicc.UiccCard - 作用:表示 UICC 卡(SIM 卡)
- 职责:
- 管理卡状态(CardState)
- 支持多端口
- 管理 UiccPort
30. UiccProfile
- 包路径:
com.android.internal.telephony.uicc.UiccProfile - 作用:表示 SIM 卡配置文件(Profile)
- 职责:
- 管理多个 UiccCardApplication
- 管理 PIN/PUK 状态
- 管理运营商权限规则
- 触发 SIM 文件加载
- 发送 SIM 状态变化通知
31. UiccCardApplication
- 包路径:
com.android.internal.telephony.uicc.UiccCardApplication - 作用:表示 SIM 卡上的应用(USIM/CSIM/ISIM)
- 职责:
- 管理应用状态
- 创建 IccRecords 加载文件
- 创建 IccFileHandler 访问文件
- 处理 PIN/PUK 验证
32. IccRecords(及其子类)
- 包路径:
com.android.internal.telephony.uicc.IccRecords - 作用:加载和管理 SIM 卡文件记录
- 子类:
- SIMRecords - GSM SIM 卡
- RuimRecords - CDMA SIM 卡
- IsimUiccRecords - ISIM 应用
- 职责:
- 读取 SIM 文件(IMSI、ICCID、MSISDN、SPN 等)
- 缓存常用信息
- 通知记录加载完成
- 处理 SIM 刷新(Refresh)
- 关键方法:
fetchSimRecords()- 开始加载 SIM 文件onAllRecordsLoaded()- 所有记录加载完成
33. IccFileHandler
- 包路径:
com.android.internal.telephony.uicc.IccFileHandler - 作用:SIM 文件读写接口
- 职责:
- 读取透明文件(Transparent)
- 读取线性固定文件(Linear Fixed)
- 写入 SIM 文件
- 处理文件路径转换
八、短信管理
34. SMSDispatcher(及其子类)
- 包路径:
com.android.internal.telephony.SMSDispatcher - 作用:短信发送的抽象基类
- 子类:
- GsmSMSDispatcher - GSM 短信
- CdmaSMSDispatcher - CDMA 短信
- 职责:
- 短信编码和分片
- 发送短信到 Modem
- 处理发送状态报告
- 管理短信发送队列
- 运营商短信过滤
- 关键方法:
sendText()- 发送文本短信sendMultipartText()- 发送长短信sendData()- 发送数据短信
35. InboundSmsHandler(及其子类)
- 包路径:
com.android.internal.telephony.InboundSmsHandler - 作用:短信接收处理器
- 子类:
- GsmInboundSmsHandler - GSM 短信接收
- CdmaInboundSmsHandler - CDMA 短信接收
- 职责:
- 实现状态机处理接收流程
- 存储短信到数据库(raw 表)
- 分发短信给应用(有序广播)
- 处理短信拼接(长短信)
- WAP Push 处理
- 状态机:
- STARTUP → IDLE → DELIVERING → WAITING → RETURNING
36. WapPushOverSms
- 包路径:
com.android.internal.telephony.WapPushOverSms - 作用:处理 WAP Push 消息(彩信通知)
- 职责:
- 解析 WAP Push PDU
- 分发彩信通知
- 处理 SI/SL 消息
九、IMS 服务
37. ImsResolver
- 包路径:
com.android.internal.telephony.ims.ImsResolver - 作用:IMS 服务解析和绑定管理器
- 职责:
- 扫描系统中的 IMS 服务
- 绑定 ImsService(MMTel/RCS)
- 处理运营商配置变化
- 管理 IMS Feature 生命周期
- 监听应用包变化
- 关键方法:
initialize()- 初始化并开始绑定bindCarrierServicesIfAvailable()- 绑定运营商 IMS 服务
38. ImsManager
- 包路径:
com.android.telephony.ims.ImsManager - 作用:IMS 服务的客户端接口
- 职责:
- 提供 IMS 注册、呼叫等接口
- 管理 IMS 配置
- 处理 IMS 能力查询
十、订阅管理
39. SubscriptionManagerService
- 包路径:
com.android.internal.telephony.subscription.SubscriptionManagerService - 作用:订阅信息管理服务
- 职责:
- 管理订阅信息(SubscriptionInfo)
- 分配和管理 Subscription ID
- 处理 SIM 卡插拔
- 更新订阅数据库
- 通知订阅变化
- 关键概念:
- Subscription - 订阅,与 SIM 卡关联
- SubId - 订阅 ID,全局唯一标识
40. SubscriptionInfo
- 包路径:
android.telephony.SubscriptionInfo - 作用:表示单个订阅信息
- 职责:
- 存储订阅详细信息(ICCID、IMSI、号码、运营商等)
- 提供订阅属性查询接口
十一、通知与回调
41. PhoneNotifier / DefaultPhoneNotifier
- 包路径:
com.android.internal.telephony.PhoneNotifier/DefaultPhoneNotifier - 作用:Telephony 内部状态变化通知接口
- 职责:
- 将 Phone 内部状态变化通知给系统服务
- 调用 TelephonyRegistryManager 分发状态
- 通知事件:
- 服务状态变化
- 呼叫状态变化
- 数据连接状态变化
- 信号强度变化
- 等等
42. TelephonyRegistryManager
- 包路径:
android.telephony.TelephonyRegistryManager - 作用:TelephonyRegistry 系统服务的客户端接口
- 职责:
- 调用 TelephonyRegistry 系统服务的 Binder 接口
- 注册/注销 TelephonyCallback
- 通知状态变化
43. TelephonyCallback (应用层)
- 包路径:
android.telephony.TelephonyCallback - 作用:应用层监听 Telephony 状态的回调接口
- 子接口:
- ServiceStateListener
- CallStateListener
- DataConnectionStateListener
- SignalStrengthsListener
- CellInfoListener
- 等等
十二、辅助与工具类
44. CarrierConfigManager
- 包路径:
android.telephony.CarrierConfigManager - 作用:运营商配置管理
- 职责:
- 提供运营商特定配置
- 支持配置覆盖和更新
45. TelephonyManager
- 包路径:
android.telephony.TelephonyManager - 作用:Telephony 功能的应用层 API
- 职责:
- 提供查询接口(网络状态、运营商信息等)
- 提供控制接口(数据开关等)
- 注册状态监听器
46. SignalStrengthController
- 包路径:
com.android.internal.telephony.SignalStrengthController - 作用:信号强度管理
- 职责:
- 从 Modem 获取信号强度
- 计算信号等级
- 通知信号变化
47. AccessNetworksManager
- 包路径:
com.android.internal.telephony.data.AccessNetworksManager - 作用:管理接入网络选择
- 职责:
- 决定数据连接使用 WWAN 还是 WLAN
- 根据 APN 类型选择传输类型
- 处理 QNS(Qualified Network Selection)
十三、核心类关系图
系统启动
↓
PhoneGlobals.onCreate()
↓
PhoneFactory.makeDefaultPhones()
├─ 创建 RIL[] (每个 SIM 卡槽)
│ └─ 管理 RadioServiceProxy 家族
│ ├─ RadioVoiceProxy
│ ├─ RadioDataProxy
│ ├─ RadioNetworkProxy
│ └─ ...
├─ 创建 UiccController
│ └─ 管理 UiccSlot[]
│ └─ UiccCard → UiccPort → UiccProfile
│ └─ UiccCardApplication
│ └─ IccRecords (SIMRecords/RuimRecords)
├─ 创建 SubscriptionManagerService
└─ 创建 GsmCdmaPhone[]
├─ ServiceStateTracker (网络注册)
│ └─ NetworkRegistrationManager
├─ GsmCdmaCallTracker (CS 呼叫)
├─ DataNetworkController (数据连接)
│ ├─ DataProfileManager (APN 管理)
│ └─ DataNetwork[] (PDN 连接)
├─ SMSDispatcher (短信发送)
├─ InboundSmsHandler (短信接收)
└─ ImsPhone (IMS 业务)
└─ ImsPhoneCallTracker (VoLTE/VoWiFi)
十四、总结
Telephony 框架的核心类可以按照以下维度理解:
- 纵向分层:应用层 API → Framework 服务 → RIL → Modem HAL
- 横向功能:语音、数据、短信、IMS、SIM 卡、订阅管理
- 设计模式:工厂模式、状态机、观察者模式、策略模式
- 通信机制:Handler/Message、Registrant/RegistrantList、Callback
每个核心类都有明确的职责边界,通过接口和事件机制松耦合,构成了一个复杂但结构清晰的系统。