在 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
启用或停用该服务。如果服务被停用,则不会查询该服务。
系统 UI 实现
根据您的实现,可能需要更改系统 UI。例如,要允许用户指定从特定电话帐户拨打给特定联系人的所有呼叫,您必须为设备实现自定义的设置流程和设置 UI。
验证
要验证您的实现,请运行以下 CTS 测试