电话账号建议

在 Android 10 中,电话账号建议服务允许在用户拨打电话时向其显示电话账号建议。例如,如果用户的设备装有多个 SIM 卡并且网内通话费率较低,则此服务会首先识别被呼叫者的运营商,然后建议使用与被呼叫者位于同一网络的 SIM 卡。

电话账号建议服务是可选的,可以在搭载 Android 10 或更高版本的设备上实现。

实现

如需实现电话账号建议,请在 /system/priv-app/ 中的应用内实现一项 PhoneAccountSuggestionService 服务。如果实现了多项 PhoneAccountSuggestionService,平台不会查询该服务。该服务必须声明 android.Manifest.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE 权限。

如果用户拨打电话,而未对被呼叫者设置默认拨出电话账号首选电话账号,电信服务会绑定到 PhoneAccountSuggestionService 以收集有关账号的信息,平台会调用 onAccountSuggestionRequest(String number),并挂起外拨电话进程。

PhoneAccountSuggestionService 必须使用 onAccountSuggestionRequest(String number) 返回的号码来调用 suggestPhoneAccounts(String number, List<PhoneAccountSuggestion> suggestions)

调用 suggestPhoneAccounts(String number, List<PhoneAccountSuggestion> suggestions) 时,电信服务会返回建议的电话账号列表。然后,拨号器必须显示建议的电话账号列表,供用户选择从哪个账号发起呼叫。

PhoneAccountSuggestion

如需提供建议,请使用 PhoneAccountSuggestion 类。例如,如果服务确定被呼叫者与设备中的某张 SIM 卡位于同一运营商网络,该服务应该用 REASON_INTRA_CARRIER 标记该电话账号。然后,可通过拨号器将这一信息传达给用户。

再如,如果用户将设备配置为对 Google 工作账号中的所有联系人使用工作 SIM 卡,则服务应该用 REASON_USER_SET 标记该电话账号,并将 shouldAutoSelect 设置为 true,以允许拨号器绕过选择对话框并自动使用该电话账号拨打电话。

如需了解其他建议,请参阅 PhoneAccountSuggestion

拨号器

当呼叫进入 STATE_SELECT_PHONE_ACCOUNT 状态后,拨号器必须使用来自 PhoneAccountSuggestion 的信息处理 EXTRA_SUGGESTED_PHONE_ACCOUNTS

停用服务

如需自定义特定运营商的实现,您可以使用 setComponentEnabledSetting 启用或停用该服务。平台不会查询已停用的服务。

系统界面实现

您可能需要更改系统界面,具体取决于您的实现。例如,若要允许用户指定对特定联系人的所有呼叫均用特定电话账号进行,您必须为设备实现一个自定义设置流程和设置界面。

验证

如需验证您的实现,请运行以下 CTS 测试: