10

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

我对onGetRoot()and的功能感到困惑onLoadChildren()

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

1 回答 1

19

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

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

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

如果订阅,相册 MediaItem 将返回类似 -> album1(可浏览)album2(可浏览)的内容

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

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

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

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

onLoadChildren()因此,当我们选择订阅 MediaItems 以获取其子节点时调用。

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

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

4)OnLoadChildren如果你愿意,可以返回一个播放列表。为此,请定义一个可浏览的 mediaItem“播放列表名称”,它将返回该播放列表中的 MediaItem。

于 2019-01-23T16:09:49.913 回答