onLoadChildren должен вызывать detach (), MusicBrowserService, Android? - PullRequest
0 голосов
/ 15 января 2019

Я использую MediaBrowserService для воспроизведения звука на устройстве. При включении Bluetooth и воспроизведении аудио приложение вылетает.

Ниже журналы

java.lang.IllegalStateException: onLoadChildren must call detach() or sendResult() before returning for package=com.android.bluetooth id=__ROOT__
   at android.service.media.MediaBrowserService.performLoadChildren(MediaBrowserService.java:669)
   at android.service.media.MediaBrowserService.addSubscription(MediaBrowserService.java:600)
   at android.service.media.MediaBrowserService.-wrap3(MediaBrowserService.java)
   at android.service.media.MediaBrowserService$ServiceBinder$3.run(MediaBrowserService.java:272)
   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:6682)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

Как с этим справиться?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

onLoadChildren ()

Вызывается для получения информации о дочерних элементах мультимедиа.

Реализации должны вызывать result.sendResult со списком дочерних элементов. Если загрузка детей будет дорогой операцией, которая должна быть выполняется в другом потоке, result.detach может быть вызван раньше возвращаясь из этой функции, а затем result.sendResult вызывается, когда загрузка завершена.

Если у элемента мультимедиа нет детей, позвоните MediaBrowserService.Result.sendResult (T) с пустым списком.

https://developer.android.com/reference/android/service/media/MediaBrowserService.html#onLoadChildren(java.lang.String,%20android.service.media.MediaBrowserService.Result%3Cjava.util.List%3Candroid.media.browse.MediaBrowser.MediaItem%3E%3E,%20android.os.Bundle)

Так или иначе result.sendResult() должен быть вызван в реализации onLoadChildren().

0 голосов
/ 15 января 2019

Похоже, MediaBrowserService обрабатывает его в неправильном состоянии, проверьте жизненный цикл здесь: https://developer.android.com/guide/topics/media-apps/audio-app/building-a-mediabrowserservice#service-lifecycle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...