Android API для установки уровня громкости

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

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 9, AudioManager.FLAG_SHOW_UI);

Я выполнил следующие настройки для маршрутизации звука через динамик при подключенной гарнитуре (это требование моего приложения) audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setSpeakerphoneOn(true);

Когда я играю желаемый тон после этой настройки, звук направляется через динамик (даже если гарнитура подключена), но громкость слишком высока, что выглядит так, как будто setStreamVolume API не работает, поскольку я установил для него только уровень громкости 9, который довольно низкий. Если я сниму гарнитуру и запущу свой вариант использования, этот API будет работать нормально, т. Е. Звук будет воспроизводиться с меньшей громкостью.

Есть ли какой-либо другой API, который можно использовать для настройки громкости воспроизведения звуковых сигналов в Android при подключенной гарнитуре?


person sim    schedule 20.09.2013    source источник
comment
Существует альтернативный способ принудительного воспроизведения MUSIC потоков на громкоговоритель.   -  person Michael    schedule 21.09.2013


Ответы (1)


Если ваше приложение не является заменой сотовых вызовов, использование MODE_IN_CALL фактически оптимизирует сотовый звук и сокращает ресурс STREAM_MUSIC. Если вы используете звук STREAM_MUSIC с MODE_IN_CALL, в зависимости от производителя телефона / расширения AudioPolicyManagerBase, вы увидите много странного поведения, например, случай, который вы наблюдаете.

Во-первых, убедитесь, что вы указали воспроизведение звука через STREAM_MUSIC. Так что ваш регулятор громкости действительно контролирует правильный поток.

Во-вторых, я бы предложил использовать MODE_IN_COMMUNICATION вместо MODE_IN_CALL. Многие политики производителей / операторов в отношении звука относятся только к MODE_IN_CALL (сотовый вызов).

В-третьих, если это все еще происходит, вам следует протестировать свое приложение на другом производителе / ​​операторе телефона, чтобы изолировать проблему. Иногда это ошибка конкретного устройства, которую вы просто не можете исправить. Я сам видел несколько подобных случаев.

person Kevin I. Wu    schedule 21.09.2013