MediaBrowser.subscribe не работает после того, как я возвращаюсь к действию 1 из упражнения 2 (6.0.1 Android)
Когда я открываю действие 1 (действие приложения "Основной / запуск"), которое включает в себя подключение к MediaBrowser, MediaBrowser.subscribe
работает нормально (onChildrenLoaded
вызывается после него), но когда я открыл какое-то другое мероприятие (номер 2) из упражнения 1 (используя прослушиватель нажатия кнопки и намерение), а затем закрыл это действие 2, MediaBrowser.subscribe
перестает работать - onChildrenLoaded
НЕ вызывается после подписки, поэтому после завершения действия 2 onConnected
SubscriptionCallback (действия 1) & mMediaBrowser.subscribe(MEDIA_ID_ROOT, mSubscriptionCallback);
звонят, но мои предметы не обновляются, потому что onChildrenLoaded
никогда не срабатывает
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.4 Android (таких проблем нет)
Обновить
Кажется, я нашел эту проблему в ошибках 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
Но нет решения
Также есть такая ошибка:
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(). Это работает сейчас.
3 ответа
Временное решение:
переместите MediaBrowserCompat.connect() из onStart() в onCreate() и переместите MediaBrowserCompat.disconnect() из onStop() в onDestroy(). Это работает сейчас.
Должно быть исправлено в v25.4.0: https://issuetracker.google.com/issues/37133265
- Эта проблема была помечена как исправленная в google Issueracker в Support Lib v 25.4.0.
- решение для
переместите MediaBrowserCompat.connect() из onStart () в onCreate() и переместите MediaBrowserCompat.disconnect() из onStop () в onDestroy()
работает для меня.
- когда я переместил их и исправил исходную проблему, появилась следующая:
MediaController Callback
не работал Мне кажется, что это вызвано подобной ошибкой. Итак, я переехал звонокunsubscribe()
вonDestroy()
тоже, и теперь все работает.
Теперь мой код выглядит так:
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();
}
}
Со ссылкой на гугл трекер.
Проблема исправлена и выпущена в 25.4.0 версии библиотеки поддержки.
Если какая-либо проблема не устранена, сообщите в систему отслеживания проблем Google, которую они снова откроют для изучения.