Как я могу разумно управлять громкостью звука в моем приложении для Android? - PullRequest
33 голосов
/ 10 марта 2009

У меня есть приложение, которое воспроизводит прерывистые звуки, когда его активность открыта, и пользователь всегда ожидает, что он издаст эти шумы, но, к сожалению, он ограничен громкостью музыкального потока. Опции, которые я обнаружил, таковы:

  1. Отрегулируйте громкость музыкального потока, возможно, оглушая пользователя, если он проигрывает музыку в то время.
  2. Вызовите MediaPlayer.setVolume (), который неэффективен, если громкость музыкального потока равна 0.
  3. Ручка кнопки громкости нажимает себя, что представляет две проблемы: нажатия кнопки громкости регулируют громкость звонка, если мой звук не воспроизводится, и я до сих пор не смог отловить событие onKey для нажатия кнопки громкости с помощью моего OnKeyListener. Если бы был какой-то способ заставить настройку примениться к музыкальному потоку, когда моя деятельность сфокусирована, или просто ловить нажатие кнопки, это сработало бы.
  4. Воспроизведение тихого зацикленного звука в фоновом режиме, чтобы музыкальный поток оставался в контексте для регулировки громкости.

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

Ответы [ 4 ]

71 голосов
/ 23 марта 2009

Получил еще одно предложение от Групп Google, которое представляет собой интегрированное платформенное решение, которое я искал и работает нормально:

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

Вызовите этот API в вашем onCreate ():

setVolumeControlStream (AudioManager.STREAM_MUSIC);

Это говорит AudioManager, что когда ваше приложение имеет фокус, объем клавиши должны регулировать громкость музыки.

2 голосов
/ 13 апреля 2011

Это полезный API: setVolumeControlStream (AudioManager.STREAM_MUSIC);

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

1 голос
/ 25 октября 2015

Если вы используете метод OnKeyDown, вы можете обойти эту проблему, выполнив следующие действия:

public boolean onKeyDown(int keyCode, KeyEvent event) {    
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
                setVolumeControlStream(AudioManager.STREAM_MUSIC);}}
0 голосов
/ 07 декабря 2011

Это не поможет, если у вас есть метод переопределения onKeyDown (int keycode, KeyEvent event) для действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...