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

时间:2018-03-28 23:36:17

标签: android android-mediasession mediabrowserservicecompat

我是Android的初学者,试图通过MediaBrowser和MediaSession的实现来创建媒体播放器。

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

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

1 个答案:

答案 0 :(得分:1)

https://stackoverflow.com/questions/49545835/what-is-the-purpose-of-ongetroot-and-onloadchildren-in-mediabrowserserviceco#=

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

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

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

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

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

对于所有可浏览的MediaItem,我们可以选择“订阅”它们以获取所有子节点。当我们动态构建用户界面时,这会有所帮助。

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

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

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

onLoadChildren()。

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

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

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