Android 7.0 将与来电通知相关的功能从 Android 平台中的通讯系统 (Telecom) 服务移到了拨号器应用。以前,显示来电相关通知的职责由通讯系统和默认拨号器应用分担,这就导致了行为不一致。在 Android 7.0 中,拨号器承担了处理来电通知的所有职责。
Android 6.x 及更早版本中的行为
在之前的 Android 版本中,通讯系统和拨号器分别承担以下职责:
功能 | 由通讯系统执行 | 由拨号器执行 |
---|---|---|
来电通知 | 是(响铃、振动) | 是(通知显示、来电显示) |
发送至语音信箱 | 是 | 否 |
自定义铃声 | 是 | 否 |
未接电话通知 | 是 | 否 |
消息等待指示(呼叫语音信箱) | 是(电话) | 否 |
可视语音信息通知 | 否 | 是 |
因这种职责分担导致的不一致行为的示例包括:
- 通讯系统负责启动振铃器/振动器,但拨号器负责显示来电提醒。如果拨号器启动缓慢,则可能导致响铃数秒后才显示来电通知。
- 通讯系统负责显示未接电话通知。由于专有功能(如 Google 来电显示)不适用于这些通知,因此可能会导致通讯系统通知与拨号器界面(如通话记录)不一致。
Android 7.0 及更高版本中的行为
Android 开源项目 (AOSP) 拨号器会实施新的功能。如需了解详情,请参阅以下文档:
- 未接电话通知
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
通知样式。如需了解详情,请参阅允许按来电重要性排名的新通话通知。
实现
如果通讯系统/电话组件会公开可供默认拨号器使用的 API,设备实现人员可能需要对这些组件进行更新。