2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
スマートフォン アカウントの候補
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
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 テストを実施します。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-26 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-26 UTC。"],[],[],null,["# Phone account suggestion\n\nIn Android 10, the phone account suggestion service\nallows suggestions for phone\naccounts to be shown to users when making a call. For example, for users with a\ndevice with multiple SIMs and lower rates for intra-network calls, this\nservice first identifies the callee's carrier and then suggests using the SIM on\nthe same network as the callee.\n\nThe phone account suggestion service is optional and can be implemented on\ndevices running Android 10 or higher.\n\nImplementation\n--------------\n\nTo implement phone account suggestions, implement *one*\n[`PhoneAccountSuggestionService`](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/PhoneAccountSuggestionService.java)\nservice in an app that is located in `/system/priv-app/`. The service isn't\nqueried if more than one `PhoneAccountSuggestionService`is implemented. The\nservice must declare the\n`android.Manifest.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE` permission.\n\nWhen a user makes an outgoing call where neither the\n[default outgoing phone account](https://developer.android.com/reference/android/telecom/TelecomManager.html#getDefaultOutgoingPhoneAccount(java.lang.String))\nnor the\n[preferred phone account](https://developer.android.com/reference/android/provider/ContactsContract.DataColumns.html#PREFERRED_PHONE_ACCOUNT_COMPONENT_NAME)\nis set for the callee, the telecom service binds to\n`PhoneAccountSuggestionService` to gather information about the accounts,\n[`onAccountSuggestionRequest(String number)`](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/PhoneAccountSuggestionService.java#98)\nis called, and the outgoing call process is suspended.\n\n`PhoneAccountSuggestionService` must call\n[`suggestPhoneAccounts(String number, List\u003cPhoneAccountSuggestion\u003e suggestions)`](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/PhoneAccountSuggestionService.java#110)\nwith the number returned by\n[`onAccountSuggestionRequest(String number)`](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/PhoneAccountSuggestionService.java#98).\n\nWhen\n[`suggestPhoneAccounts(String number, List\u003cPhoneAccountSuggestion\u003e suggestions)`](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/PhoneAccountSuggestionService.java#110)\nis called, the telecom service returns a list of suggested phone accounts. The\ndialer must then display the list of suggested phone accounts for the user to\nchoose from to make the call.\n\n### PhoneAccountSuggestion\n\nTo make suggestions, use the\n[PhoneAccountSuggestion](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/PhoneAccountSuggestion.java)\nclass.\nFor example, if the service determines the callee is on the same carrier as one\nof the SIMs in the device, the service should mark the phone account with\n[`REASON_INTRA_CARRIER`](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/PhoneAccountSuggestion.java#46).\nThis information can then be conveyed to the user in the dialer.\n\nFor example, in a situation where the user has configured the device to use\na work SIM for all contacts\nin a work Google Account, the service should mark the phone account with\n[`REASON_USER_SET`](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/PhoneAccountSuggestion.java#58)\nand set\n[`shouldAutoSelect`](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/PhoneAccountSuggestion.java#121)\nto true to allow the dialer to bypass the selection dialog and automatically\nplace the call using the phone account.\n\nFor information on other suggestions, see\n[`PhoneAccountSuggestion`](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/PhoneAccountSuggestion.java).\n\n### Dialer\n\nWhen the call enters the\n[`STATE_SELECT_PHONE_ACCOUNT`](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/Call.java#84)\nstate, the dialer must use the information from\n[`PhoneAccountSuggestion`](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/PhoneAccountSuggestion.java)\nto handle\n[`EXTRA_SUGGESTED_PHONE_ACCOUNTS`](https://android.googlesource.com/platform/frameworks/base/+/android16-release/telecomm/java/android/telecom/Call.java#136).\n\n### Disable the service\n\nTo customize your implementation for specific carriers, you can enable or\ndisable the service using\n[`setComponentEnabledSetting`](https://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName,%20int,%20int)%60).\nThe service is not queried if disabled.\n\n### System UI implementation\n\nDepending on your implementation, changes to the system UI may be required. For\nexample, to allow users to specify that all calls to a specific contact are\nmade from a specific phone account, you must implement a customized set up flow\nand settings UI for the device.\n\nValidation\n----------\n\nTo validate your implementation, run the following CTS tests:\n\n- [`/cts/tests/tests/telecom/src/android/telecom/cts/PhoneAccountSuggestionServiceTest.java`](https://android.googlesource.com/platform/cts/+/android16-release/tests/tests/telecom/src/android/telecom/cts/PhoneAccountSuggestionServiceTest.java)\n- [`/cts/tests/tests/telecom/src/android/telecom/cts/PhoneAccountSuggestionTest.java`](https://android.googlesource.com/platform/cts/+/android16-release/tests/tests/telecom/src/android/telecom/cts/PhoneAccountSuggestionTest.java)"]]