【问题标题】:What is the purpose of onGetRoot() and onLoadChildren() in MediaBrowserServiceCompat?MediaBrowserServiceCompat 中 onGetRoot() 和 onLoadChildren() 的作用是什么?
【发布时间】:2018-03-28 23:36:17
【问题描述】:

我是一名 Android 开发的初学者,试图创建一个具有 MediaBrowserMediaSession 实现的媒体播放器。

我对@9​​87654325@ 和onLoadChildren() 的功能感到困惑。

  1. 我的第一个问题是layman's term 这两种方法的目的是什么。
  2. 它们与onGetRoot() 相关的根是什么?我想到的是,它是目录的根目录,对吗?
  3. onLoadChildren() 中的孩子是什么?我想到的是根目录中的音乐列表,对吗?
  4. onLoadchildren() 会返回实际的播放列表吗?

【问题讨论】:

标签: android android-mediasession mediabrowserservicecompat


【解决方案1】:

参考:https://developer.android.com/guide/topics/media-apps/audio-app/building-a-mediabrowserservice

为了理解这一点,重要的是要清楚地了解MediaItem 代表什么。 在参考中,提供了以下声明“您的服务负责将 ID 与适当的菜单节点或内容项相关联。” 您需要使用 MediaItem 类来定义项目的层次结构(PLAYABLE 或 BROWSEABLE)。一个例子是

root(不是媒体项,但可以订阅以返回媒体项的最高级别) -> 歌曲(可浏览) 专辑(可浏览) 艺术家(可浏览)

如果订阅,相册 MediaItem 将返回类似 -> 专辑 1(可浏览) 专辑 2(可浏览)

在您的专辑 1 中,您将拥有可播放的 MP3,例如 -> song1.mp3(可播放) song2.mp3(可播放)

对于所有可浏览的 MediaItem,我们可以选择“订阅”它们以获取所有子节点;这有助于我们动态构建 UI。

将此概念与软件架构相关联,您需要考虑将访问onGetRootonLoadChildren 的内容。它们是 MediaBrowserService 的一部分,因此这些功能将由 MediaBrowser 进行交互。

1) 调用onGetRoot() 以获得权限 以访问MediaBrowserService 提供的媒体。它将返回一个可以订阅的“根 ID”,并返回层次结构最高级别的 MediaItem。 IE。在上面的示例中,订阅根节点将返回歌曲、专辑和艺术家。

onLoadChildren() 因此在我们选择订阅 MediaItem 以获取其子节点时被调用。

2) 这与根目录无关,而是用于订阅您自定义层次结构的顶层(根)的“根 ID”

3) OnLoadChildren 由 MediaBrowser 的 subscribe 方法调用,将返回所有子 MediaItems(可浏览或可播放)。

4) OnLoadChildren 可以根据需要返回播放列表。为此,请定义一个可浏览的 mediaItem“播放列表名称”,它将返回该播放列表中的 MediaItem。

【讨论】:

  • 描述的很清楚,比安卓文档做的更好。尽管他们解释了这些方法,但我不清楚客户端和服务如何通过 subscribe 进行交互,来自文档。这使它一目了然。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
相关资源
最近更新 更多