核心类及其作用

2 阅读12分钟

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 - 当前 ServiceState
    • mNewSS - 新获取的 ServiceState
    • mRegStateManagers - 网络注册管理器

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() - 为网络请求选择 APN
    • setPreferredDataProfile() - 设置首选 APN
    • updateDataProfiles() - 更新 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 框架的核心类可以按照以下维度理解:

  1. 纵向分层:应用层 API → Framework 服务 → RIL → Modem HAL
  2. 横向功能:语音、数据、短信、IMS、SIM 卡、订阅管理
  3. 设计模式:工厂模式、状态机、观察者模式、策略模式
  4. 通信机制:Handler/Message、Registrant/RegistrantList、Callback

每个核心类都有明确的职责边界,通过接口和事件机制松耦合,构成了一个复杂但结构清晰的系统。