Я столкнулся с аналогичной ситуацией при разработке медиаплеера. Моим решением было использовать OnAudioFocusChangeListener
.
AudioManager
Вы реализуете слушателя в классе, вот так
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);
Это не такая большая настройка, как вы думаете, и она позволяет вам настраивать ваш медиапроигрыватель при появлении неожиданного звука (например, будильника или таймера выключается).