Поддержка сторонних приложений для вызовов,Поддержка сторонних приложений для вызовов,Поддержка сторонних приложений для вызовов

Android 9 предоставляет API для лучшей поддержки сторонних (3P) приложений для звонков. Приложения для 3P-вызовов обычно полагаются на API-интерфейсы телефонии, такие как широковещательная передача PHONE_STATE , для совместной работы с телефонными вызовами оператора связи. Как следствие, приложения для 3P-вызовов должны отдавать приоритет вызовам оператора связи и часто прибегать к молчаливому отклонению входящих вызовов в приложении или прекращению текущего вызова, чтобы освободить место для вызова оператора связи.

API-интерфейсы в Android 9 поддерживают сценарии одновременных вызовов между 3P-приложениями и вызовами оператора связи. Это позволяет, например, принимать входящий вызов 3P во время разговора с оператором связи. Платформа берет на себя ответственность за обеспечение удержания вызова оператора связи, когда пользователь участвует в вызове 3P.

В Android 9 приложениям для 3P-вызовов рекомендуется реализовать самоуправляемый API ConnectionService . Дополнительные сведения о том, как создать вызывающее приложение с помощью этого API, см. в разделе Создание вызывающего приложения .

Самоуправляемый API ConnectionService также дает разработчикам возможность разрешить регистрацию вызовов в их приложении в журнале системных вызовов (см. EXTRA_LOG_SELF_MANAGED_CALLS ). В соответствии с требованиями Документа определения совместимости Android (CDD) (раздел 7.4.1.2) вы должны убедиться, что ваше приложение для набора номера/телефона отображает эти записи журнала вызовов и показывает имя приложения для 3P-вызовов, из которого произошел вызов (например, как приложение дозвона AOSP соответствует этому требованию, см. Записи журнала вызовов из приложений для 3P-вызовов ).

Приложения несут ответственность за настройку CAPABILITY_SUPPORT_HOLD и CAPABILITY_HOLD для подключений своих приложений. Однако возможно, что в некоторых обстоятельствах приложение не сможет удержать вызов. В структуру включены положения для разрешения подобных случаев.

Сценарии

Вам следует изменить приложение дозвона для обработки следующих сценариев.

Обработка входящих вызовов, которые отключают текущий вызов

В сценарии, когда существует текущий вызов 3P (например, вызов SuperCaller), который не поддерживает удержание, и пользователь получает мобильный вызов (например, через своего оператора связи FooCom), ваше приложение Dialer/Phone должно указать пользователю, что он отвечает вызов мобильной сети завершит текущий вызов 3P.

Этот пользовательский опыт важен, поскольку приложение для 3P-вызовов может иметь текущий вызов, который не может быть удержан платформой. Ответ на новый мобильный вызов приводит к отключению текущего вызова 3P.

Пример см. в пользовательском интерфейсе ниже:

Входящий вызов, отключающий текущий вызов 3P
Рисунок 1. Входящий вызов, который разъединяет текущий вызов 3P.

Приложение для набора номера может проверить, приводит ли входящий вызов к отключению другого вызова, проверив дополнительные возможности вызова . Убедитесь, что для EXTRA_ANSWERING_DROPS_FG_CALL установлено значение TRUE , а для EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME установлено имя приложения, вызов которого отключается при ответе на входящий мобильный вызов.

Записи журнала вызовов из приложений для 3P-вызовов

Разработчики приложений для 3P-вызовов могут разрешить регистрацию вызовов в своем приложении в журнале системных вызовов (см. EXTRA_LOG_SELF_MANAGED_CALLS ). Это означает, что в журнале вызовов могут быть записи, не относящиеся к вызовам мобильной сети.

Когда приложение дозвона AOSP отображает записи журнала вызовов, относящиеся к приложению для 3P-вызовов, в журнале вызовов отображается имя приложения, в котором произошел вызов, как показано ниже:

Запись журнала вызовов с помощью приложения для 3P-вызовов
Рисунок 2. Запись журнала вызовов с названием приложения для 3P-вызовов в приложении дозвона.

Чтобы определить имя приложения, связанного с записью журнала вызовов, используйте столбцы PHONE_ACCOUNT_COMPONENT_NAME и PHONE_ACCOUNT_ID в поставщике журнала вызовов, чтобы создать экземпляр PhoneAccountHandle , который идентифицирует источник записи журнала вызовов. Запросите TelecomManager , чтобы получить сведения об учетной записи PhoneAccount.
Чтобы определить, принадлежит ли запись журнала вызовов из приложения для 3P-вызовов, проверьте возможности PhoneAccount и проверьте, установлен ли CAPABILITY_SELF_MANAGED .

Метод getLabel возвращаемого PhoneAccount возвращает имя приложения, связанное с записью журнала вызовов из приложения, вызывающего 3P.

Проверка

Чтобы проверить, поддерживает ли ваше устройство приложения для 3P-вызовов, используйте тестовое приложение Telecomm, которое реализует самоуправляемый API ConnectionService. Приложение находится в /packages/services/Telecomm/testapps/ .

  1. Создайте тестовое приложение из корня исходного репозитория Android, используя:

    mmma packages/services/Telecomm/testapps/

  2. Установите APK-файл сборки, используя adb install -g -r <apk path> . После этого на панель запуска добавляется значок «Самоуправляемый образец».

  3. Коснитесь значка, чтобы открыть тестовое приложение.

Обработка входящих вызовов, которые отключают текущий вызов

Выполните следующие действия, чтобы убедиться, что входящий вызов отключает текущий вызов 3P.

Тестовое приложение для приложений 3P-вызовов
Рис. 3. Тестовое приложение с примерами реализации самоуправляемого API ConnectionService.
  1. Снимите флажок с параметра «Удерживаемый» .
  2. Нажмите «ИСХОДЯЩИЙ» , чтобы начать новый образец исходящего вызова.
  3. Нажмите кнопку АКТИВНО , чтобы активировать вызов.
  4. Позвоните по номеру тестируемого устройства с другого телефона. Это вызывает сценарий, в котором вашему номеронабирателю предоставляется имя приложения, вызов которого будет отключен.
  5. Когда вы закончите, нажмите кнопку ОТКЛЮЧИТЬ в тестовом приложении.

Записи журнала вызовов из приложений для 3P-вызовов

После выполнения описанных выше шагов тестовое приложение должно было зарегистрировать вызов в журнале системных вызовов. Чтобы убедиться, что устройство регистрирует вызовы из приложений 3P-вызовов, откройте приложение для набора номера и убедитесь, что вызов отображается в системном журнале вызовов.