Когда я пытаюсь воспроизвести звук или текст в речь через 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"/>.