Какова цель onGetRoot() и onLoadChildren() в MediaBrowserServiceCompat?

Я новичок в Android, пытаюсь создать медиаплеер с реализацией MediaBrowser и MediaSession.

Я перепутал с функцией onGetRoot() и onLoadChildren().

  1. Мой первый вопрос в layman's term какова цель этих двух функций.
  2. К какому корню они относятся в onGetRoot()? Я имею в виду, что это корень каталога, я прав?
  3. Что за дети имеют отношение к onLoadChildren()? что я имею ввиду это список музыки в корне, я прав?
  4. Будет ли это onLoadchildren() возвращать фактический плейлист?

0 ответов

/questions/8844354/kakova-tsel-ongetroot-i-onloadchildren-v-mediabrowserservicecompat

Ссылка: https://developer.android.com/guide/topics/media-apps/audio-app/building-a-mediabrowserservice

Чтобы понять это, важно иметь четкое представление о том, что представляет собой MediaItem. В этой ссылке приводится следующее утверждение: "Ваша служба отвечает за сопоставление идентификатора с соответствующим узлом меню или элементом контента". Вам необходимо использовать класс MediaItem для определения иерархии элементов (PLAYABLE или BROWSEABLE). Примером будет

root (не медиа-элемент, но можно подписаться для возврата наивысшего уровня медиа-элементов) -> песни (просматриваются) альбомы (просматриваются) исполнители (просматриваются)

альбомы MediaItem, если подписаны, будут возвращать что-то вроде -> album1 (просматриваемый) album2 (просматриваемый)

и в вашем альбоме 1 у вас будут воспроизводимые MP3-файлы, например -> song1.mp3 (воспроизводимый) song2.mp3 (воспроизводимый)

Для всех просматриваемых MediaItems мы можем выбрать "подписку" на них, чтобы получить все дочерние узлы; что помогает нам динамически создавать пользовательский интерфейс.

Относя эту концепцию к архитектуре программного обеспечения, вам нужно подумать о том, что будет иметь доступ к onGetRoot и onLoadChildren. Они являются частью MediaBrowserService, поэтому функции будут взаимодействовать с MediaBrowser.

1) onGetRoot () вызывается для получения прав доступа к носителю, который предоставляет MediaBrowserService. Он вернет "корневой идентификатор", на который можно подписаться, и вернет MediaItems на самом высоком уровне вашей иерархии. Т.е. в приведенном выше примере подписка на корневой узел вернула бы Songs, Albums и Artists.

Поэтому onLoadChildren() вызывается, когда мы решаем подписаться на MediaItems, чтобы получить их дочерние узлы.

2) Это относится не к корневому каталогу, а к "корневому идентификатору", используемому для подписки на верхний (корневой) уровень вашей собственной иерархии.

3) OnLoadChildren вызывается методом подписки MediaBrowser и возвращает все дочерние элементы MediaItems (доступные для просмотра или воспроизведения).

4) OnLoadChildren может вернуть плейлист, если хотите. Для этого определите mediaItem "имя списка воспроизведения", который можно просматривать, и он вернет MediaItems в этом списке воспроизведения.

Другие вопросы по тегам