Неустранимое исключение: java.lang.IllegalStateException в MediaBrowser

У моего приложения потокового аудио есть эта проблема в Crashlytics, с трассировкой стека ниже

Fatal Exception: java.lang.IllegalStateException: getExtras() called while not connected (state=CONNECT_STATE_CONNECTING)
   at android.media.browse.MediaBrowser.getExtras(MediaBrowser.java:296)
   at android.support.v4.media.MediaBrowserCompatApi21.getExtras(SourceFile:65)
   at android.support.v4.media.MediaBrowserCompat$MediaBrowserImplApi21.onConnected(SourceFile:1852)
   at android.support.v4.media.MediaBrowserCompat$ConnectionCallback$StubApi21.onConnected(SourceFile:649)
   at android.support.v4.media.MediaBrowserCompatApi21$ConnectionCallbackProxy.onConnected(SourceFile:102)
   at android.media.browse.MediaBrowser$5.run(MediaBrowser.java:577)
   at android.os.Handler.handleCallback(Handler.java:751)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6316)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

В моем коде я запускаю MediaBrowser

mMediaBrowserCompat = new MediaBrowserCompat(this, new ComponentName(this, BackgroundAudioService.class),
            mMediaBrowserCompatConnectionCallback, input);

Я также предоставил соединение обратного вызова

private MediaBrowserCompat.ConnectionCallback mMediaBrowserCompatConnectionCallback = new MediaBrowserCompat.ConnectionCallback() {

    @Override
    public void onConnected() {
        super.onConnected();
        try {

            mMediaControllerCompat = new MediaControllerCompat(Player2Activity.this, mMediaBrowserCompat.getSessionToken());
            mMediaControllerCompat.registerCallback(mMediaControllerCompatCallback);
            MediaControllerCompat.setMediaController(Player2Activity.this,mMediaControllerCompat);

        } catch (RemoteException e) {

        }
    }



    public void onConnectionSuspended() {
        Log.v(TAG, "mMediaBrowserCompatConnection onConnectionSuspended");
        mMediaBrowserCompat = null;
    }

};

Эта проблема меня так смущает, потому что я не вижу, чтобы моя функция обратного вызова вызывалась в трассировке стека. Кроме того, я вижу, что функции onConnected() уже вызываются в трассировке стека, однако, почему он все еще жалуется, что состояние все еще CONNECT_STATE_CONNECTING. Надеюсь, кто-нибудь может помочь мне здесь.

Заранее спасибо.

1 ответ

Решение

Это произошло для меня, когда я нажимал на кнопку более одного раза при запуске и аудио. Объект MediaBrowserCompat инициализируется несколько раз, что вызывает ошибку.

При инициализации объекта просто поставьте нулевую проверку:

if(mMediaBrowser == null)
                mMediaBrowser = new MediaBrowserCompat(context, new ComponentName(context, MusicService.class), mConnectionCallback, null);

Надеюсь, что это работает.

Другие вопросы по тегам