Android 6.0(Marshmallow)引入了可视化语音信箱 (VVM) 支持的实现,该支持集成到拨号器中,允许兼容的运营商 VVM 服务通过最少的配置挂接到拨号器。可视化语音信箱让用户可以轻松查看语音信箱,而无需拨打任何电话。用户可以在类似收件箱的界面中查看消息列表,按任何顺序收听消息,并可以根据需要删除消息。
Android 7.0 向可视化语音信箱添加了以下配置参数
- 语音信箱预取由
KEY_VVM_PREFETCH_BOOLEAN
控制 - 蜂窝数据连接是否为必需项由
KEY_VVM_CELLULAR_DATA_REQUIRED_BOOLEAN
控制 - 获取语音信箱转录
- 获取语音信箱配额
本页概述了所提供的功能、运营商如何集成这些功能以及一些实现细节。
可视化语音信箱 (VVM) 客户端
Android 6.0 及更高版本包含 OMTP VVM 客户端,该客户端(在提供正确配置的情况下)连接到运营商 VVM 服务器,并在 Android 开源项目 (AOSP) 拨号器中填充 VVM 消息。VVM 客户端具有以下功能:
- 处理用于激活/停用/查询服务状态的短信消息,以及用于通知设备订阅者邮箱中事件的短信消息
- 将邮箱与 IMAP 服务器同步
- 在用户选择收听语音信箱时下载语音信箱
- 获取语音信箱转录
- 获取语音信箱配额的详细信息(总邮箱大小和已占用大小)
- 集成到拨号器中,实现用户功能,例如回拨、查看未读消息、删除消息等。
与 VVM 客户端集成
实现
运营商必须提供一个实现 OMTP VVM 规范 的可视化语音邮件服务器。AOSP VVM 客户端的当前实现支持核心功能(读取/删除语音邮件、下载/同步/收听),但其他 TUI 功能(密码更改、语音邮件问候语、语言)尚未实现。目前,我们仅支持 OMTP 1.1 版本,并且不使用加密进行 IMAP 身份验证。
为了支持转录,运营商必须支持 OMTP 1.3 规范第 2.1.3 项中指定的转录附件格式(MIME 类型 plain/text)。
注意: 发往设备的服务器发起的短信消息(例如 STATUS 或 SYNC)必须是数据短信消息。
配置
为了使运营商能够与 VVM 服务集成,运营商必须向平台提供 OMTP 客户端可以使用的配置详细信息。这些参数是
- 短信的目标号码和端口号
- 运营商提供的可视化语音邮件应用程序的软件包名称(如果提供),以便在该软件包安装后可以禁用平台实现
这些值通过 Carrier Config API 提供。此功能在 Android 6.0 中推出,允许应用程序动态地向需要它的各种平台组件提供与电话相关的配置。特别是,以下键必须定义值
KEY_VVM_DESTINATION_NUMBER_STRING
KEY_VVM_PORT_NUMBER_INT
KEY_VVM_TYPE_STRING
KEY_CARRIER_VVM_PACKAGE_NAME_STRING
KEY_VVM_PREFETCH_BOOLEAN
KEY_VVM_CELLULAR_DATA_REQUIRED_BOOLEAN
有关详细信息,请参阅 运营商配置。
实现
OMTP VVM 客户端在 packages/services/Telephony
中实现,尤其是在 src/com/android/phone/vvm/
中。
设置
- VVM 客户端监听
TelephonyIntents#ACTION_SIM_STATE_CHANGED
或CarrierConfigManager#ACTION_CARRIER_CONFIG_CHANGED
。 - 当添加具有正确运营商配置值的 SIM 卡(
KEY_VVM_TYPE_STRING
设置为TelephonyManager.VVM_TYPE_OMTP
或TelephonyManager.VVM_TYPE_CVVM
)时,VVM 客户端会向KEY_VVM_DESTINATION_NUMBER_STRING
中指定的值发送 ACTIVATE SMS。 - 服务器激活可视化语音邮件服务,并通过 STATUS SMA 发送 OMTP 凭据。当 VVM 客户端收到 STATUS SMS 时,它会注册语音邮件源并在设备上显示语音邮件标签页。
- OMTP 凭据本地保存,设备开始完全同步,如下所述。
同步
VVM 客户端可以通过多种方式与运营商服务器同步,反之亦然。
- 完全同步发生在初始下载时。VVM 客户端获取语音邮件元数据,例如日期和时间;原始号码;持续时间;语音邮件转录(如果可用);以及音频数据(如果
KEY_VVM_PREFETCH_BOOLEAN
为 True)。完全同步可以由以下情况触发:- 插入新的 SIM 卡
- 重启设备
- 恢复服务
- 接收
VoicemailContract.ACTION_SYNC_VOICEMAIL
广播
- 上传同步发生在用户与语音邮件交互以读取或删除它时。上传同步会导致服务器更改其数据以匹配设备上的数据。例如,如果用户读取语音邮件,则会在服务器上标记为已读;如果用户删除语音邮件,则会在服务器上删除它。
- 下载同步发生在 VVM 客户端从运营商收到“MBU”(邮箱更新)SYNC SMS 时。SYNC 消息包含新消息的元数据,以便可以将其存储在语音邮件内容提供商中。
注意: 语音邮件收件箱配额值在每次同步期间检索。
语音邮件下载
当用户按下播放以收听语音邮件时,将下载相应的音频文件。如果用户选择收听语音邮件,拨号器可以广播 VoicemailContract.ACTION_FETCH_VOICEMAIL
,语音邮件客户端接收到此广播后,会启动内容下载,并更新平台语音邮件内容提供商中的记录。
禁用 VVM
VVM 服务可以通过用户交互、移除有效的 SIM 卡或被运营商 VVM 应用程序替换来禁用或停用。禁用意味着本地设备不再显示可视化语音邮件。停用意味着为订阅者关闭服务。用户交互可以停用服务,SIM 卡移除会暂时禁用服务,因为它不再存在,而运营商 VVM 替换会禁用 AOSP VVM 客户端。
用户交互
用户可以手动启用或禁用可视化语音邮件。如果用户禁用可视化语音邮件,他们也会停用其服务。当他们禁用可视化语音邮件时,会发送 DEACTIVATE SMS,本地取消注册语音邮件源,并且语音邮件标签页消失。如果他们重新启用可视化语音邮件,他们的服务也会被重新激活。
SIM 卡移除
如果设备的 SIM 卡状态 (ACTION_SIM_STATE_CHANGED
) 或运营商配置值 (ACTION_CARRIER_CONFIG_CHANGED
) 发生更改,并且给定 SIM 卡的有效配置不再存在,则本地取消注册语音邮件源,并且语音邮件标签页消失。如果 SIM 卡被替换,VVM 将重新启用。
被运营商 VVM 替换
运营商可视化语音邮件应用程序(如果安装在设备上)可以禁用 AOSP VVM 客户端。这是通过检查是否安装了包名称与 KEY_CARRIER_VVM_PACKAGE_NAME_STRING
参数匹配的软件包来实现的。
VVM 客户端仍然可以通过用户交互启用。
测试
存在一组现有的(自 Android 4.0 起)针对 VoicemailProvider API 的 CTS 测试,这些测试允许应用程序将语音邮件插入/查询/删除到平台中。这些是 VVM 用于添加/删除语音邮件的相同 API,以便任何拨号器应用程序都可以在 UI 中显示它们。
要测试您的配置应用程序是否正确传递 OMTP 配置,您可以使用以下条件测试您的代码:
- 包含有效证书签名的 SIM 卡
- 运行 Android 6.0 且具有未修改版本的 AOSP 手机框架的设备