Как я могу управлять звуковыми томами в моем приложении Android?
У меня есть приложение, которое воспроизводит прерывистые звуки, пока его активность открыта, и пользователь всегда ожидает, что он сделает эти шумы, но, к сожалению, он ограничен объемом музыкального потока. Параметры, которые я обнаружил, таким образом:
- Отрегулируйте громкость музыкального потока, возможно, оглушая пользователя, если они будут играть музыку в то время.
- Вызвать MediaPlayer.setVolume(), который неэффективен, если объем музыкального потока равен 0.
- Кнопка ручного тома нажимает на себя, что вызывает две проблемы: нажатие кнопки регулировки громкости регулирует громкость звонка, если только мой звук не воспроизводится, и я еще не смог поймать событие onKey для нажатия кнопки громкости с помощью моего OnKeyListener. Если бы был какой-то способ заставить корректировку применяться к музыкальному потоку, пока моя активность фокусируется, или просто нажать кнопку, она сама будет работать.
- Воспроизведение звукового фрагмента аудио в фоновом режиме для сохранения музыкального потока в контексте для регулировки громкости.
Я думаю, что 3-й вариант, вероятно, лучше всего, поскольку он передает управление томом пользователю, но если есть какой-то способ просто переопределить системный том в одном экземпляре mediaplayer, который тоже будет работать.
Ответы
Ответ 1
Есть еще одно предложение через группы Google, которое является интегрированным решением платформы, которое я искал и прекрасно работает:
Пожалуйста, не обрабатывайте клавиши регулировки громкости себя - почти невозможно гарантируйте, что вы не поведение клавиш регулировки громкости.
Вызовите этот API в свой onCreate():
setVolumeControlStream (AudioManager.STREAM_MUSIC);
Это сообщает AudioManager, что когда ваше приложение имеет фокус, объем клавиши должны регулировать громкость музыки.
Ответ 2
Полезно использовать этот API: setVolumeControlStream (AudioManager.STREAM_MUSIC);
Если это не произойдет, я потрачу больше времени на исправление этой ошибки тома.
Ответ 3
Если вы используете метод OnKeyDown, вы можете обойти эту проблему, выполнив следующие действия:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
setVolumeControlStream(AudioManager.STREAM_MUSIC);}}
Ответ 4
Это не поможет вам, если вы переопределите метод onKeyDown (int keycode, KeyEvent event) для действия.