Android: MediaPlayer AUDIOFOCUS_LOSS & setOnErrorListener () Problem

Ich erstelle eine Musik-Player-App.

Wenn ich überprüfe, ob meine Anwendung AudioFocus verliert, stoppt die Wiedergabe. Dies wirft jedoch das Problem auf, dass ich, wenn ich einen Titel wiedergebe, ihn stoppe und dann wiedergebe,switch case AudioManager.AUDIOFOCUS_LOSS wird gerufen, in dem ich den Player angehalten habe, da er den Fokus verliert.

Meine eigene App verliert also den Fokus auf sich. Offensichtlich waren dies nicht meine Absichten. Ich wollte, dass es aufgerufen wird, wenn ein anderer Musikplayer den Fokus anfordert.

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

Es gibt noch ein Problem, Ausnahme, die ich bekommen habe, istIllegalStateException.

Dies bedeutet, wenn der Code nach innen reichtcase AudioManager.AUDIOFOCUS_LOSSMein Musikplayer befindet sich in einem fehlerhaften Zustand. Um das zu überprüfen, habe ich einOnErrorListener mit:

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

Aber dieser Zuhörer wird nie angerufen. Ich werde jede Hilfe zu schätzen wissen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage