在 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 测试: