我是Android开发的初学者,试图创建一个实现MediaBrowser
和MediaSession
的媒体播放器。
我对onGetRoot()
和onLoadChildren()
的功能感到困惑。
layman's term
中这两种方法的目的是什么。 onGetRoot()
中属于什么根?我要记住的是,它是目录的根目录,对吗? onLoadChildren()
中的子级是什么?我想到的是根目录中的音乐列表,对吗? onLoadchildren()
会返回实际的播放列表吗? 最佳答案
引用:https://developer.android.com/guide/topics/media-apps/audio-app/building-a-mediabrowserservice
为了理解这一点,重要的是要清楚了解MediaItem
代表什么。
在该引用文献中,提供了以下语句“您的服务负责将ID与适当的菜单节点或内容项相关联。”
您需要使用MediaItem类来定义项目的层次结构(PLAYABLE或BROWSEABLE)。一个例子是
根(不是媒体项目,但可以订阅以返回最高级别的媒体项目)
->
歌曲(可浏览)
相册(可浏览)
艺术家(浏览)
如果订阅了专辑,MediaItem专辑将返回类似
->
相册1(可浏览)
album2(可浏览)
在专辑1中,您将拥有可播放的MP3,例如
->
song1.mp3(可播放)
song2.mp3(可播放)
对于所有可浏览的MediaItem,我们可以选择“订阅”它们以获取所有子节点。当我们一个人动态地构建我们的用户界面时,这会有所帮助。
将此概念与软件体系结构相关联,您需要考虑将要访问onGetRoot
和onLoadChildren
的内容。它们是 MediaBrowserService 的一部分,因此,这些功能将由 MediaBrowser 进行交互。
1)调用onGetRoot()
以获得权限来访问MediaBrowserService
提供的媒体。它将返回一个“根ID”,可以订阅该根ID,并在层次结构的最高级别返回MediaItems。 IE。在上面的示例中,订阅根节点将返回“歌曲”,“专辑”和“艺术家”。
因此,当我们选择订阅MediaItems以获取其子节点时,将调用onLoadChildren()
。
2)这与根目录无关,而与用于订阅您自定义层次结构的顶层(根)级别的“根ID”有关
3)OnLoadChildren
由MediaBrowser的subscription方法调用,并将返回所有子MediaItems(可浏览或可播放)。
4)OnLoadChildren
可以根据需要返回播放列表。为此,定义一个可以浏览的mediaItem“播放列表名称”,它将返回该播放列表中的MediaItem。
关于android - MediaBrowserServiceCompat中的onGetRoot()和onLoadChildren()的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49545835/