Как воспроизводить звук через наушник в Android 12?

#android #android-audiomanager

Вопрос:

Я разрабатываю приложение для голосовых вызовов для Android с использованием PeerJS и WebView. И я хочу, чтобы звук воспроизводился через наушник. Вот мой код,

 private fun initAudio(){  am = getSystemService(AUDIO_SERVICE) as AudioManager  volumeControlStream = AudioManager.STREAM_VOICE_CALL  am.mode = AudioManager.MODE_IN_COMMUNICATION  am.isSpeakerphoneOn = false//lt;= not working in android 12 }  private fun toggleSpeakerMode(){  am.isSpeakerphoneOn = !am.isSpeakerphoneOn // lt;= final value is always true in android 12 }  

Приведенный выше код отлично работает в старых версиях Android, но не в Android 12 (эмулятор). am.isSpeakerphoneOn всегда верно в Android 12. Я что-то здесь делаю не так? Или это ошибка в эмуляторе?

Обновить

Эта проблема возникает только после запуска потока WebRTC в WebView (я могу переключить громкоговоритель перед потоком).

Ответ №1:

По умолчанию webrtc использует динамик для воспроизведения голоса. Однако в качестве альтернативы Вы можете вызвать setSpeakerphoneOn(false) то,что определено в AudioManager.java класс.

Просто передайте значение false в этом параметре функции, и он отключит громкоговоритель телефона во время вызова, и будет использоваться динамик. Я также протестировал его на телефонах Android 12, и он работает нормально.

Если проблема все еще сохраняется, то у вас есть какая-то ошибка в вашем эмуляторе.

Комментарии:

1. Я использую библиотеку javascript PeerJS в веб-представлении для вызовов (не библиотеку Android WebRTC). И я могу использовать наушник до того, как начнется трансляция (для звука звонка). Но когда мы получаем поток, он всегда воспроизводится через громкоговоритель. Средство setSpeakerphoneOn(false) не имеет эффекта, am.isSpeakerphoneOn true всегда возвращается при потоковой передаче.