onLoadChildren должен вызывать detach(), MusicBrowserService, Android?
Я использую 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 ответа
onLoadChildren()
Вызывается, чтобы получить информацию о детях из медиа-элемента.
Реализации должны вызывать result.sendResult со списком дочерних элементов. Если загрузка дочерних элементов будет дорогостоящей операцией, которая должна выполняться в другом потоке, файл result.detach может быть вызван перед возвратом из этой функции, а затем вызван result.sendResult, когда загрузка завершена.
Если у элемента мультимедиа нет дочерних элементов, вызовите MediaBrowserService.Result.sendResult(T) с пустым списком.
Так или иначе result.sendResult()
должен быть вызван в onLoadChildren()
реализация.
Похоже, MediaBrowserService обрабатывает его в неправильном состоянии, проверьте жизненный цикл здесь: https://developer.android.com/guide/topics/media-apps/audio-app/building-a-mediabrowserservice