致命异常:MediaBrowser 中的 java.lang.IllegalStateException

Posted

技术标签:

【中文标题】致命异常:MediaBrowser 中的 java.lang.IllegalStateException【英文标题】:Fatal Exception: java.lang.IllegalStateException in MediaBrowser 【发布时间】:2018-04-20 12:44:08 【问题描述】:

我的音频流应用在 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);

希望有效。

【讨论】:

以上是关于致命异常:MediaBrowser 中的 java.lang.IllegalStateException的主要内容,如果未能解决你的问题,请参考以下文章

致命异常:Cloudinary OnProgress 方法中的 java.lang.RuntimeException 数组长度错误

收到致命警报:java 1.7.0_80 中的握手失败异常

致命异常:java.lang.NoClassDefFoundError 解析失败:某些设备中的 Ljava/time/Month

Android:致命异常:java.lang.OutOfMemoryError

Java中的异常处理

java中一个致命的异常,全世界求救!!!!