首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在我从活动2(6.0.1Android)返回到活动1之后,MediaBrowser.subscribe无法工作。

在我从活动2(6.0.1Android)返回到活动1之后,MediaBrowser.subscribe无法工作。
EN

Stack Overflow用户
提问于 2017-04-02 15:04:45
回答 3查看 1.6K关注 0票数 4

当我打开活动1(应用程序的主/启动程序活动),其中包括MediaBrowser连接时,MediaBrowser.subscribe工作正常(在活动1之后调用onChildrenLoaded),但当我从活动1(使用按钮单击侦听器和意图)打开其他一些活动(使用按钮单击侦听器和意图),然后关闭该活动2时,MediaBrowser.subscribe停止工作--在订阅之后不调用onChildrenLoaded,因此在活动2完成之后,调用了SubscriptionCallback (活动1)和mMediaBrowser.subscribe(MEDIA_ID_ROOT, mSubscriptionCallback);onConnected,但我的项目没有更新,因为onChildrenLoaded从未被触发。

代码语言:javascript
复制
private MediaBrowserCompat.ConnectionCallback mConnectionCallback =
            new MediaBrowserCompat.ConnectionCallback() {
                @Override
                public void onConnected() {
                    Log.i(TAG, "onConnected");
                    mMediaBrowser.unsubscribe(MEDIA_ID_ROOT, mSubscriptionCallback);
                    mMediaBrowser.subscribe(MEDIA_ID_ROOT, mSubscriptionCallback);

                }
            };

private MediaBrowserCompat.SubscriptionCallback mSubscriptionCallback = new MediaBrowserCompat.SubscriptionCallback() {

        @Override
        public void onChildrenLoaded(String parentId, List<MediaBrowserCompat.MediaItem> children) {
            Log.i(TAG, "onChildrenLoaded"); // isn't being called on android 6.0.1 after I got back to this activity from other
        if (children != null) {
            if (mMediaItems != null) {
                mMediaItems.clear();
                mMediaItems = null;
            }
            mMediaItems = children;
            if (mAdapter == null) {
                mAdapter = new Adapter();
                mRecyclerView.setAdapter(mAdapter);
            } else {
                mAdapter.notifyDataSetChanged();
            }
        }
        }

        @Override
        public void onError(String id) {
            Log.i(TAG, "SubscriptionCallback onError");
        }
    };

但是对于4.4.4Android(没有这样的问题),它可以正常工作。

更新

似乎我在Google上发现了这个问题(一些开发人员报告了这个问题):https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=-has%3Asubcomponent%20-has%3Atarget%20emulator%20.&colspec=ID%20Status%20Priority%20Owner%20Summary%20Stars%20Reporter%20Opened&groupby=&sort=&id=232455

但没有解决办法

也有这样的错误:

代码语言:javascript
复制
04-02 18:25:55.519 11250-11250/com.android.player W/MBServiceCompat: removeSubscription for callback that isn't registered id=hhhh
04-02 18:25:55.519 11250-11250/com.android.player W/MBServiceCompat: addSubscription for callback that isn't registered id=hhhh
04-02 18:25:55.525 11250-11250/com.android.player W/MBServiceCompat: removeSubscription for callback that isn't registered id=hhhh
04-02 18:25:55.525 11250-11250/com.android.player W/MBServiceCompat: addSubscription for callback that isn't registered id=hhhh

更新2

也在那里

https://github.com/googlesamples/android-UniversalMusicPlayer/issues/92

这个链接的最后一个注释也将为我解决这个问题。

更新3

是的,github.com/googlesamples/android-UniversalMusicPlayer/issues/92#issuecomment-287668132解决了问题:

将MediaBrowserCompat.connect()从onStart()移动到onCreate(),并将MediaBrowserCompat.disconnect()从onStop()移动到onDestroy()。现在起作用了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-08 17:41:46

临时解决办法:

将MediaBrowserCompat.connect()从onStart()移动到onCreate(),并将MediaBrowserCompat.disconnect()从onStop()移动到onDestroy()。现在起作用了。

必须在v25.4.0:https://issuetracker.google.com/issues/37133265#comment3中修复

票数 0
EN

Stack Overflow用户

发布于 2017-04-24 17:24:31

  1. 此问题被标记为修正了支持Lib v 25.4.0的google问题跟踪器
  2. 解决办法

将MediaBrowserCompat.connect()从onStart()移动到onCreate(),将MediaBrowserCompat.disconnect()从onStop()移动到onDestroy()

为我工作。

  1. 当我移动它们并修复原来的问题时,下一个问题出现了:MediaController Callback没有工作。对我来说,这似乎是由类似的错误引起的。因此,我也将调用unsubscribe()转移到onDestroy(),现在一切都正常了。

所以我的代码现在看起来是:

代码语言:javascript
复制
protected void onCreate(Bundle savedInstanceState) {
    ...    
    mediaBrowser = new MediaBrowserCompat(this, new ComponentName(this, AudioService.class),
            connCallbacks,
            null);
    mediaBrowser.connect();
    ...
}

@Override
protected void onStart() {
    super.onStart();
}

@Override
protected void onStop() {
    super.onStop();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    MediaControllerCompat cntrlr = MediaControllerCompat.getMediaController(this);
    if(cntrlr != null) {
        cntrlr.unregisterCallback(cntrlrCallback);
    }
    if(mediaBrowser.isConnected()) {
        mediaBrowser.unsubscribe(mediaBrowser.getRoot());
        mediaBrowser.disconnect();
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-01-03 10:38:56

参考Google问题跟踪器

25.4.0版本的支持库修复并发布了该问题。

如果有任何问题持续存在,请在Google问题跟踪器报告,他们将重新打开检查.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43169875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档