Android 7.0 将与呼叫通知相关的功能从 Android 平台中的 Telecom 系统服务移至 Dialer 应用。以前,显示与呼叫相关的通知的责任由 Telecom 和默认 Dialer 应用分担,导致行为不一致。在 Android 7.0 中,Dialer 承担处理呼叫通知的所有责任。
Android 6.x 及更低版本中的行为
在早期的 Android 版本中,Telecom 和 Dialer 按如下方式分担责任
功能 | 由 Telecom 完成 | 由 Dialer 完成 |
---|---|---|
来电通知 | 是(响铃、振动) | 是(通知显示、来电显示) |
发送到语音信箱 | 是 | 否 |
自定义铃声 | 是 | 否 |
未接来电通知 | 是 | 否 |
消息等待指示器(呼叫语音信箱) | 是(电话) | 否 |
可视语音信箱通知 | 否 | 是 |
由这种责任分担导致的不一致行为示例包括:
- Telecom 负责启动响铃器/振动器,但 Dialer 负责显示来电通知。如果 Dialer 启动速度缓慢,则可能导致响铃在来电通知显示前几秒钟开始。
- Telecom 负责显示未接来电通知。由于专有功能(例如 Google 来电显示)在这些通知上不起作用,因此可能会导致 Telecom 通知与 Dialer 界面(例如通话记录)之间存在不一致。
Android 7.0 及更高版本中的行为
Android 开源项目 (AOSP) Dialer 实现了新功能。如需了解详情,请参阅以下文档:
- 未接来电通知
Telecom/src/com/android/server/telecom/ui/MissedCallNotifierImpl.java
Dialer/android/dialer/calllog/MissedCallNotificationReceiver.java
Dialer/android/dialer/calllog/MissedCallNotifier.java - 播放铃声
frameworks/base/telecomm/java/android/telecom/InCallService.java
Telecom/src/com/android/server/telecom/InCallController.java
Dialer/java/com/android/incallui/ringtone/
Dialer/java/com/android/incallui/StatusBarNotifier.java - VVM 通知
frameworks/base/telephony/java/android/telephony/TelephonyManager.java
Telephony/src/com/android/phone/PhoneInterfaceManager.java
Dialer/src/com/android/dialer/calllog/DefaultVoicemailNotifier.java
Android 12 或更高版本中的呼叫通知样式
对于运行 Android 12 或更高版本的设备,为了提供一致的呼叫用户体验,我们建议应用对来电和去电使用 CallStyle
通知样式。如需了解详情,请参阅允许对来电的重要性进行排序的新电话呼叫通知。
实现
设备实现者可能需要更新 Telecom/Telephony 组件,这些组件公开了可供默认 Dialer 使用的 API。