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

Pla*_*er1 3 android android-mediasession mediabrowserservicecompat

我在Android的开发初学者试图建立一个媒体播放器的实现MediaBrowserMediaSession

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

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

gol*_*992 6

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

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

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

如果订阅了专辑,MediaItem专辑将返回-> album1(可浏览),专辑2(可浏览)

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

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

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

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

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

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

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

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