Предложение аккаунта на телефоне

В Android 10 сервис подсказок аккаунтов телефона позволяет показывать пользователям подсказки аккаунтов телефона при совершении звонка. Например, если у пользователя устройство с несколькими SIM-картами и более низкими тарифами на звонки внутри сети, этот сервис сначала определяет оператора связи вызываемого абонента, а затем предлагает использовать SIM-карту из той же сети.

Сервис подсказок аккаунтов на телефоне необязателен и может быть реализован на устройствах с Android 10 или более поздней версии.

Реализация

Чтобы реализовать подсказки для аккаунтов, связанных с номером телефона, реализуйте один PhoneAccountSuggestionService сервис в приложении, которое находится в /system/priv-app/. Если реализовано несколько свойств PhoneAccountSuggestionService, сервис не запрашивается. Сервис должен объявить разрешение android.Manifest.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE.

Когда пользователь совершает исходящий вызов, для которого не задан ни аккаунт по умолчанию для исходящих вызовов, ни предпочитаемый аккаунт, телекоммуникационный сервис привязывается к PhoneAccountSuggestionService, чтобы собрать информацию об аккаунтах. Вызывается onAccountSuggestionRequest(String number), и исходящий вызов приостанавливается.

PhoneAccountSuggestionService должен вызвать suggestPhoneAccounts(String number, List<PhoneAccountSuggestion> suggestions) с номером, возвращенным onAccountSuggestionRequest(String number).

При вызове suggestPhoneAccounts(String number, List<PhoneAccountSuggestion> suggestions) сервис возвращает список рекомендуемых аккаунтов. Затем приложение для набора номера должно показать пользователю список предложенных телефонных аккаунтов, из которых он сможет выбрать нужный для совершения звонка.

PhoneAccountSuggestion

Чтобы создавать подсказки, используйте класс PhoneAccountSuggestion. Например, если сервис определяет, что вызываемый абонент пользуется услугами того же оператора, что и одна из SIM-карт в устройстве, сервис должен пометить аккаунт телефона значением REASON_INTRA_CARRIER. Эта информация может быть передана пользователю в приложении "Телефона".

Например, если пользователь настроил устройство так, чтобы для всех контактов в рабочем аккаунте Google использовалась рабочая SIM-карта, сервис должен пометить аккаунт телефона значком REASON_USER_SET и установить для параметра shouldAutoSelect значение true, чтобы приложение "Телефоны" могло пропустить диалоговое окно выбора и автоматически совершить звонок, используя аккаунт телефона.

Информацию о других подсказках можно найти в статье PhoneAccountSuggestion.

Dialer

Когда звонок переходит в состояние STATE_SELECT_PHONE_ACCOUNT, номеронабиратель должен использовать информацию из PhoneAccountSuggestion, чтобы обработать EXTRA_SUGGESTED_PHONE_ACCOUNTS.

Как отключить сервис

Чтобы настроить реализацию для определенных операторов, вы можете включить или отключить сервис с помощью setComponentEnabledSetting. Если правило отключено, запросы к сервису не отправляются.

Реализация интерфейса системы

В зависимости от реализации может потребоваться изменить системный интерфейс. Например, чтобы разрешить пользователям указывать, что все звонки определенному контакту должны совершаться с определенного аккаунта, вам нужно реализовать специальный процесс настройки и интерфейс настроек для устройства.

Проверка

Чтобы проверить реализацию, запустите следующие тесты CTS: