Я столкнулся с похожей ситуацией при разработке медиаплеера. Мое решение состояло в том, чтобы использовать AudioManager OnAudioFocusChangeListener
.
Вы реализуете слушателя в классе так
public class VideoPlayerHelper implements AudioManager.OnAudioFocusChangeListener {
Затем вы переопределяете onAudioFocusChange
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
//Just fall through by omitting break
case AudioManager.AUDIOFOCUS_LOSS:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
LogUtil.log(LogUtil.DEBUG, TAG, "AUDIOFOCUS_LOSS or AUDIOFOCUS_LOSS_TRANSIENT"); //Custom logging class
if (isPlaying()) {
pause();
mAudioManager.abandonAudioFocus(VideoPlayerHelper.this);
}
break;
case AudioManager.AUDIOFOCUS_GAIN:
LogUtil.log(LogUtil.DEBUG, TAG, "AUDIOFOCUS_GAIN"); //Custom logging class
break;
default:
break;
}
}
Ключ здесь AudioManager.AUDIOFOCUS_LOSS_TRANSIENT
. Это был код, который слушатель продолжал получать, когда звонил будильник (на Note 5). Поэтому я просто обработал AudioManager.AUDIOFOCUS_LOSS_TRANSIENT
так же, как AudioManager.AUDIOFOCUS_LOSS
, приостановив медиаплеер и отпустив аудиофокус.
Когда мы настраиваем медиаплеер, я добавил эту строку перед добавлением источника данных.
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
Убедитесь, что в вашем коде для запуска медиаплеера также есть эта строка (у меня она есть в коде запуска и коде onResume
на случай, если будильник сработает, когда приложение находится в фоновом режиме).
mAudioManager.requestAudioFocus(VideoPlayerHelper.this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
Эта строка помогает вам вернуть фокус звука, когда вы нажимаете кнопку воспроизведения после отключения будильника.
Вы также должны отпустить звуковой фокус, когда закончите с медиаплеером. Я поместил эту строку кода в методы onStop
и onDetach
.
mAudioManager.abandonAudioFocus(VideoPlayerHelper.this);
Это не так много настроек, как вы думаете, и это позволяет вам настраивать медиаплеер всякий раз, когда появляется неожиданный звук (например, будильник или таймер).
person
welshk91
schedule
05.10.2015