我是Android开发的初学者,试图创建一个实现MediaBrowserMediaSession的媒体播放器。

我对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,我们可以选择“订阅”它们以获取所有子节点。当我们一个人动态地构建我们的用户界面时,这会有所帮助。

    将此概念与软件体系结构相关联,您需要考虑将要访问onGetRootonLoadChildren的内容。它们是 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/

    10-09 06:11