Android: MediaPlayer AUDIOFOCUS_LOSS e setOnErrorListener ()
Estou criando um aplicativo de player de música.
Na medida em que estou verificando se meu aplicativo perde AudioFocus, a reprodução será interrompida. Mas isso está levantando uma questão que quando eu toco uma faixa - depois paro e - então reproduzo uma faixa novamente,switch case AudioManager.AUDIOFOCUS_LOSS
está sendo chamado em que eu parei o jogador, pois está perdendo o foco.
Então, meu próprio aplicativo está perdendo o foco para si mesmo. Obviamente, estas não eram minhas intenções. Eu queria que ele fosse chamado quando algum outro tocador de música solicitasse foco.
private OnAudioFocusChangeListener focusChangeListener = new OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_LOSS:
if (mPlayer.isPlaying()) {
stopPlayback();
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
if (mPlayer.isPlaying()) {
mPlayer.pause();
}
break;
case AudioManager.AUDIOFOCUS_GAIN:
if (!mPlayer.isPlaying()) {
initiatePlayback();
}
break;
}
}
};
Existe mais um problema, Exceção que eu estava recebendo éIllegalStateException
.
Isso significa que quando o código chega dentrocase AudioManager.AUDIOFOCUS_LOSS
, meu musicplayer está em algum estado errôneo. Então, para verificar isso, eu registrei umOnErrorListener
usando:
//Inside Service - onCreate() Method
mPlayer.setOnErrorListener(mErrorListener);
Mas esse ouvinte nunca é chamado. Aprecio qualquer ajuda.