Android 10 では、スマートフォン アカウントの提案サービスにより、発信時にスマートフォン アカウントの候補を表示できます。たとえば、複数の SIM が挿入されたデバイスでネットワーク内の通話率が低い場合、このサービスはまず着信先の携帯通信会社を特定し、着信先と同じネットワーク上にある SIM の使用を提案します。
スマートフォン アカウントの提案サービスはオプションで、Android 10 以降を搭載したデバイスに実装できます。
実装
スマートフォン アカウントの提案サービスを実装するには、/system/priv-app/
にあるアプリに PhoneAccountSuggestionService
サービスを 1 つ実装します。複数の 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 の 1 枚が着信先の携帯通信会社のものであると判断した場合は、該当のスマートフォン アカウントに 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 テストを実施します。