代码之家  ›  专栏  ›  技术社区  ›  WISHY

OnLoadChildren必须调用detach()、MusicBrowserService、Android?

  •  0
  • WISHY  · 技术社区  · 7 年前

    我正在使用MediaBrowser服务在设备上播放音频。 当我打开蓝牙并播放音频时,应用程序崩溃。

    下面是日志

    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 回复  |  直到 7 年前
        1
  •  1
  •   veritas1    7 年前

    OnLoadChildren()。

    调用以获取有关媒体项的子项的信息。

    启动位置 必须调用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() 实施。

        2
  •  0
  •   Maxim Firsoff    7 年前

    似乎MediaBrowserService处理它的状态不正确,请在此处检查生命周期: https://developer.android.com/guide/topics/media-apps/audio-app/building-a-mediabrowserservice#service-lifecycle

    推荐文章