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

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

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

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

Получил еще одно предложение через группы 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) для активности.

Intereting Posts
Gson fromJson () возвращает объект с нулевыми attrubutes Android – Image Picker, неправильное изображение Как создать массив org.apache.http.Header? Ошибка com.facebook.widget.loginbutton в xml Показывать индикатор выполнения на дочерней вкладке до загрузки WebView Разрешено ли использование нескольких объявлений AdMob в RecyclerView? Альтернативная рекламная сеть? Android Архитектурные шаблоны Растянуть изображение в представлении изображения для соответствия экрану в xml Сбой списка Listview в портретном режиме при нажатии на элементы (с использованием фрагментов) Android: java.lang.OutOfMemoryError: создание потока не выполнено Тесты для Android не запускаются на устройстве ниже 5 (API 21) NoClassDefFoundError Активность для ожидания ввода диалогового окна Как определить, является ли какая-либо из моих операций самой фронтальной и видимой для пользователя? Ksoap2 не может сериализовать исключение на Android 2.2 (используя пользовательский объект) Лучшая практика обработки исключений для Android?