Как я могу управлять звуковыми томами в моем приложении Android?

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

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

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

Solutions Collecting From Web of "Как я могу управлять звуковыми томами в моем приложении Android?"

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

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

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

setVolumeControlStream (AudioManager.STREAM_MUSIC);

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

Это полезно для этого API: setVolumeControlStream (AudioManager.STREAM_MUSIC);

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

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

public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { setVolumeControlStream(AudioManager.STREAM_MUSIC);}} 

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