Обновления API маршрутизации звука в Android 14 для приложений VoIP

В Android 14 были представлены обновления API, сопровождавшиеся изменениями в работе маршрутизации звука для устройств Bluetooth LE Audio (LEA), включая слуховые аппараты. Эти изменения повлияли на то, как приложения VoIP управляют выбором аудиовыхода. Этот документ предоставляет разработчикам важную информацию для адаптации своих приложений VoIP к этим изменениям и обеспечения бесперебойной работы пользователей.

Изменение поведения в Android 14

  • Маршрутизация устройств LEA: устройства LEA теперь включены по умолчанию на телефонах Pixel и AOSP. Однако для активного распознавания и выбора устройств LEA в качестве аудиовыхода приложения должны использовать новые API, представленные на уровне API 31.
  • Маршрутизация слухового аппарата. Раньше по умолчанию звук всегда передавался в слуховые аппараты, даже если пользователь явно выбирал наушник. В Android 14 слуховые аппараты теперь представлены как один из доступных вариантов вывода звука, требующий явного выбора пользователем.

Обоснование изменения

  • До Android 12 не было API для явного использования слуховых аппаратов для звонков, что приводило к тому, что при подключении звук всегда по умолчанию передавался в слуховые аппараты.
  • Из-за этого пользователям было сложно переключаться со слуховых аппаратов на наушники, не отключая слуховые аппараты.
  • Та же проблема возникла и с гарнитурами Bluetooth LE Audio.

Чтобы решить эти проблемы, в Android 14 были внесены изменения, которые предоставляют VoIP-приложениям больший контроль над маршрутизацией звука и обеспечивают согласованное поведение всех аксессуаров Bluetooth.

Ключевые изменения в Android 14

  • Общие API для выбора маршрута. В Android 12 появился AudioManager.setCommunicationDevice , позволяющий приложениям указывать аудиомаршруты, включая слуховые аппараты и устройства LEA. Однако в Android 12 и 13 слуховые аппараты не отображались как устройства, что ограничивало полезность этого API.
  • Видимость слухового аппарата. В Android 14 слуховые аппараты теперь отображаются как устройства, что позволяет приложениям предоставлять элементы пользовательского интерфейса, позволяющие пользователям выбирать предпочтительный аудиовыход.
  • Устаревшие API: несколько API-интерфейсов, связанных с маршрутизацией звука, устарели в Android 14. Разработчикам необходимо перейти на новые API-интерфейсы, представленные на уровне API 31, чтобы эффективно управлять выбором аудиовыхода.

Необходимые действия разработчика

  • Настоятельно рекомендуется: перейти на библиотеку Telecom Jetpack Library . Если возможно, перенесите свое приложение VoIP в библиотеку Telecom Jetpack для упрощения управления маршрутизацией звука.
  • Используйте setCommunicationDevice() или новейшие API (перечислены ниже), если миграция невозможна.

Устаревшие API и их замены

Устарело в Android 14. Новые API
AudioManager.isBluetoothScoOn() AudioManager.getCommunicationDevice()
AudioManager.isSpeakerphoneOn()
AudioManager.setSpeakerphoneOn() AudioManager.setCommunicationDevice()
AudioManager.startBluetoothSco()
AudioManager.stopBluetoothSco() AudioManager.clearCommunicationDevice()
Connection.getCallAudioState() Реактивный ранец:
CallControlScope.getAvailableEndpoints()
CallControlScope.getCurrentCallEndpoint()
CallControlScope#getIsMutedConnection.onMuteStateChanged()

Платформа:
CallEventCallback.onAvailableCallEndpointsChanged()
CallEventCallback.onCallEndpointChanged()
CallEventCallback.onMuteStateChanged()
Connection.onCallAudioStateChanged()
Connection.requestBluetoothAudio() Реактивный ранец:
CallControlScope#requestEndpointChange()

Платформа:
CallControl#requestCallEndpointChange()
Соединение.setAudioRoute()