MediaBrowserServiceCompat 中的 onGetRoot() 和 onLoadChildren() 的目的是什么?

What is the purpose of onGetRoot() and onLoadChildren() in MediaBrowserServiceCompat?

我是 Android 开发的初学者,试图通过实施 MediaBrowserMediaSession.

创建媒体播放器

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

  1. 我的第一个问题是layman's term这两个方法的目的是什么。
  2. 它们在 onGetRoot() 中的词根是什么?我的意思是,它是目录的根目录,我说得对吗?
  3. onLoadChildren() 中的 children 是什么?我想的是根目录中的音乐列表,我说得对吗?
  4. 这个 onLoadchildren() return 是实际的播放列表吗?

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

为了理解这一点,重要的是要清楚地理解 MediaItem 代表什么。 在参考中提供了以下声明 "Your service is responsible for associating the ID with the appropriate menu node or content item." 您需要使用 MediaItem class 来定义项目的层次结构(PLAYABLE 或 BROWSEABLE)。一个例子是

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

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

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

对于所有可浏览的 MediaItem,我们可以选择 "subscribe" 以获取所有子节点;这有助于我们动态构建 UI.

将此概念与软件架构联系起来,您需要考虑访问onGetRootonLoadChildren的内容。它们是 MediaBrowserService 的一部分,因此这些函数将通过 MediaBrowser.

进行交互

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

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

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

3) OnLoadChildren 由 MediaBrowser 的订阅方法调用,并将 return 所有子 MediaItems(可浏览或可播放)。

4) 如果您愿意,OnLoadChildren 可以 return 一个播放列表。为此,定义一个可浏览的 mediaItem "playlist name",它将 return 该播放列表中的 MediaItems。