Я не могу заставить приложение Android (работающее на Android 6.0) реагировать на нажатия клавиш громкости, когда отображается android.widget.MediaController.
Контроллер мультимедиа показан фрагментом при нажатии кнопки во фрагменте.
Активность, которая загрузила фрагмент, имеет следующий код в onCreate:
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
Когда медиа-контроллер не отображается, нажатие клавиши громкости регулирует громкость, и эта регулировка громкости влияет на громкость, с которой звук воспроизводится медиа-контроллером.
Однако, когда медиа-контроллер отображается в приложении, клавиши регулировки громкости игнорируются. Я переопределил метод onKeyDown действия, чтобы определить, когда распознаются нажатия клавиш, и они распознаются только тогда, когда медиа-контроллер не виден.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
Log.i(TAG, "Increased volume");
getAudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
Log.i(TAG, "Decreased volume");
getAudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
return true;
default:
return false;
}
}
Пользователи, как правило, хотят регулировать громкость, когда звук слышен, и именно тогда они не могут регулировать громкость, как все работает. Как можно изменить поведение медиаконтроллера, чтобы он распознавал нажатия клавиш громкости?