参考: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。
将此概念与软件架构相关联,您需要考虑将要访问的内容onGetRoot
和onLoadChildren
. 它们是MediaBrowserService的一部分,因此这些函数将由MediaBrowser进行交互。
1)onGetRoot()
被调用以获得访问提供的媒体的权限MediaBrowserService
。它将返回一个可以订阅的“根 ID”,并返回层次结构最高级别的 MediaItem。即在上面的示例中订阅根节点将返回歌曲、专辑和艺术家。
onLoadChildren()
因此,当我们选择订阅 MediaItems 以获取其子节点时调用。
2)这与根目录无关,而是用于订阅自定义层次结构的顶级(根)级别的“根 ID”
3)OnLoadChildren
由 MediaBrowser 的 subscribe 方法调用,将返回所有子 MediaItems(可浏览或可播放)。
4)OnLoadChildren
如果你愿意,可以返回一个播放列表。为此,请定义一个可浏览的 mediaItem“播放列表名称”,它将返回该播放列表中的 MediaItem。