致命异常:MediaBrowser 中的 java.lang.IllegalStateException
Fatal Exception: java.lang.IllegalStateException in 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.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。希望有人能在这里帮助我。
提前致谢。
当我在启动和音频时多次单击按钮时,我发生了这种情况。 MediaBrowserCompat 对象被多次初始化导致错误。
在初始化对象时,只需进行空检查:
if(mMediaBrowser == null)
mMediaBrowser = new MediaBrowserCompat(context, new ComponentName(context, MusicService.class), mConnectionCallback, null);
希望有用。
我的音频流应用在 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.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。希望有人能在这里帮助我。
提前致谢。
当我在启动和音频时多次单击按钮时,我发生了这种情况。 MediaBrowserCompat 对象被多次初始化导致错误。
在初始化对象时,只需进行空检查:
if(mMediaBrowser == null)
mMediaBrowser = new MediaBrowserCompat(context, new ComponentName(context, MusicService.class), mConnectionCallback, null);
希望有用。