我是Android的初学者,试图通过MediaBrowser和MediaSession的实现来创建媒体播放器。
我对onGetRoot()和onLoadChildren()的功能感到困惑。
layman's term
这两个功能的目的是什么。 答案 0 :(得分:1)
参考: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。