Какова цель onGetRoot() и onLoadChildren() в MediaBrowserServiceCompat?
Я новичок в Android, пытаюсь создать медиаплеер с реализацией MediaBrowser и MediaSession.
Я перепутал с функцией onGetRoot() и onLoadChildren().
- Мой первый вопрос в
layman's term
какова цель этих двух функций. - К какому корню они относятся в onGetRoot()? Я имею в виду, что это корень каталога, я прав?
- Что за дети имеют отношение к onLoadChildren()? что я имею ввиду это список музыки в корне, я прав?
- Будет ли это 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 в этом списке воспроизведения.