2014-10-31 3 views
1

Когда я пытаюсь воспроизвести звук или текст в речь через STREAM_RING, и мой наушник подключен, звук будет воспроизводиться как на громкой связи, так и на наушниках. Кажется, что поведение Android по умолчанию по умолчанию, но я хотел бы, чтобы звук воспроизводился только на наушниках, когда он подключался.Weird AudioManager поведение setSpeakerphoneOn

Итак, я пытаюсь контролировать состояние громкой связи перед воспроизведением звуков.

AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
am.setSpeakerphoneOn(false); 

Но этого недостаточно и не работает на моем Nexus5 (Kitkat 4.4.4). После некоторого поиска в Google я нашел, что в каком-то решении предлагается использовать AudioManager # setMode (int). Итак, код будет таким.

AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
am.setMode(AudioManager.MODE_IN_CALL); 
am.setSpeakerphoneOn(false); 

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

AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
am.setMode(AudioManager.MODE_INVALID); 
am.setSpeakerphoneOn(false); 

Я понятия не имею, почему MODE_IN_CALL вызывает нестабильный звук и MODE_INVALID работает хорошо. И для начала я понятия не имею, почему я должен позвонить AudioManager # setMode (int), чтобы выключить громкую связь.

Кто-нибудь знает об этом? Официальная ссылка на Android ничего не говорит об этих поведении, так что я не могу их четко понять.
Конечно, я уже объявил < использование-разрешение андроида: name = "android.permission.MODIFY_AUDIO_SETTINGS"/>.

ответ

1

Если вы пытаетесь воспроизвести звук с потоком как STREAM_MUSIC и режим MODE_NORMAL, то только после того, как вы вставляете и удаляете минигарнитуру, инфраструктура Android будет обрабатываться только громкой связью и гарнитурой. Лично никогда не использовал setMode (AudioManager.MODE_INVALID), и я думаю, вы никогда не должны использовать этот РЕЖИМ. Я не знаю вашего типа потока из приведенного выше кода. Найти базовую маршрутизацию аудио в моем реестре Github: https://github.com/sauravpradhan/Basic-Audio-Routing Вы можете реализовать свою логику маршрутизации в соответствии с кодом.