Telecom
服务是 Android 系统中处理电话相关功能的核心服务,尤其在车机系统(IVI, In-Vehicle Infotainment)中,它承担着关键角色:统一管理拨打电话、接听来电、挂断通话,以及处理三方通话等复杂场景。下面我将以车机场景为背景,详细介绍 Telecom 服务的核心功能、启动流程以及蓝牙通话相关流程,通俗易懂地拆解其工作机制。
一、Telecom 服务概览
1. 什么是 Telecom?
Telecom 是 Android 的系统服务之一,全名 com.android.server.telecom.TelecomService
。它负责协调电话呼叫的整个生命周期,是电话应用与底层电话实现(比如 Bluetooth、IMS、SIM 卡)之间的桥梁。
关键职责:
- 管理通话(呼入、呼出、挂断)
- 统一通话来源(SIM 卡、VoIP、蓝牙)
- 管理来电界面
- 多方通话管理(例如三方通话)
- 音频路由控制(比如车机使用蓝牙或扬声器)
二、服务启动流程(以系统启动为例)
-
系统启动初始化阶段
-
SystemServer.java
启动所有核心系统服务 -
其中之一就是
TelecomLoaderService
,它负责延迟加载TelecomService
-
-
TelecomLoaderService 启动过程
- 在 SystemServer 中注册
- 它会启动一个新的线程异步加载
TelecomService
// services/java/com/android/server/SystemServer.javaprivate void startOtherServices(@NonNull TimingsTraceAndSlog t) {if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_MICROPHONE)|| mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELECOM)|| mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {t.traceBegin("StartTelecomLoaderService");mSystemServiceManager.startService(TelecomLoaderService.class);t.traceEnd();}}
-
TelecomServiceImpl 启动
-
通过
TelecomLoaderService
加载并初始化 -
注册 Binder 接口
-
启动内部核心模块,如:
-
CallsManager
: 通话状态管理核心类 -
CallAudioManager
: 音频控制 -
ConnectionServiceRepository
: 管理所有连接服务(如 BluetoothConnectionService)
-
-
三、车机蓝牙通话场景解析
1. 蓝牙拨号(车机作为控制端)
流程:
-
用户点击车机屏幕的联系人或拨号键盘
-
车机应用通过
TelecomManager#placeCall(Uri)
进行拨号 -
Telecom 捕捉拨号请求后调用蓝牙的
BluetoothPhoneService
-
蓝牙 HFP 协议通过
BluetoothHeadsetClient
向手机发起拨号命令(ATD) -
手机执行拨号,状态回传至车机(拨号中,接通等)
核心类:
-
TelecomManager
-
BluetoothPhoneService
(Car 系统特有) -
CallsManager
-
BluetoothHeadsetClient
(车机端蓝牙 HFP 客户端)
2. 蓝牙来电(车机显示来电界面)
流程:
-
手机端有来电,蓝牙 HFP 通知车机(RING)
-
BluetoothHeadsetClient
接收到来电信号 -
系统通过
CallIntentProcessor
->CallsManager#addNewIncomingCall
-
弹出车机界面显示来电,供用户接听或挂断
3. 接听电话(车机按钮或语音)
流程:
-
用户通过点击按钮或语音助手执行“接听”
-
系统通过
TelecomManager#acceptRingingCall()
-
通知手机接听来电(ATA),音频连接建立(SCO)
-
CallsManager
进入ACTIVE
状态,界面更新为通话中
4. 挂断通话
流程:
-
用户点击“挂断”
-
车机调用
TelecomManager#endCall()
-
通过
CallsManager
通知蓝牙模块发出挂断指令(AT+CHUP) -
电话挂断,释放音频路由
5. 三方通话(Conference Call)
场景例子:
-
用户车上已与 A 通话,来电 B 进来
-
用户选择“合并通话”
流程:
-
来电 B 进来,车机界面提供“保留/合并”按钮
-
系统通过
CallsManager#conference(Call call1, Call call2)
-
蓝牙协议发送合并命令(if supported)
-
ConferenceCall
创建并替代原有两个单独通话
四、Telecom 服务核心功能总结
功能点 | 描述 |
---|---|
通话管理 | 通过 CallsManager 管理所有电话状态 |
音频路由 | CallAudioManager 控制是走车载扬声器、蓝牙耳机或手机扬声器 |
多方通话 | 管理多个同时存在的 Call 对象,提供合并/切换通话能力 |
通话来源管理 | 支持 SIM、VoIP、蓝牙等多种 ConnectionService |
来电界面控制 | 控制来电界面显示、隐藏以及通知系统 |
五、车机中优化建议与实际挑战
优化建议
-
蓝牙信令响应要快速,避免 UI 卡顿
-
音频路由需优先使用 SCO,提升通话质量
-
对接语音助手,如支持“接听电话”语音指令
常见问题
-
蓝牙连接状态异常导致拨号失败
-
音频焦点冲突(音乐和电话音频同时争抢)
-
兼容多种手机品牌的 HFP 协议差异