Android: MediaPlayer AUDIOFOCUS_LOSS i problem setOnErrorListener ()

Tworzę aplikację odtwarzacza muzyki.

Sprawdzam, czy moja aplikacja traci AudioFocus, a następnie odtwarzanie zostanie zatrzymane. Ale to podnosi jeden problem, który, gdy gram na torze - a następnie go zatrzymuję - i ponownie odtwarzam utwór,switch case AudioManager.AUDIOFOCUS_LOSS jest wywoływany, w którym zatrzymałem odtwarzacz, gdy traci ostrość.

Moja własna aplikacja traci koncentrację na sobie. Oczywiście nie były to moje intencje. Chciałem, aby zadzwonił, gdy jakiś inny odtwarzacz muzyki zażądał ostrości.

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;
        }
    }
};

Jest jeszcze jeden problem, Wyjątek, który otrzymałem, jestIllegalStateException.

Oznacza to, że kod dociera do środkacase AudioManager.AUDIOFOCUS_LOSS, mój odtwarzacz muzyczny jest w jakimś błędnym stanie. Aby to sprawdzić, zarejestrowałemOnErrorListener za pomocą:

//Inside Service - onCreate() Method
mPlayer.setOnErrorListener(mErrorListener);

Ale ten słuchacz nigdy nie zostanie wywołany. Udzielę pomocy.