Aplikacje multimedialne często zawierają kolekcje elementów multimedialnych uporządkowane hierarchicznie. Może to być na przykład album lub odcinki serialu na playliście. Ta hierarchia elementów multimediów nosi nazwę biblioteki multimediów.
MediaLibraryService
udostępnia standardowy interfejs API do obsługi biblioteki multimediów i dostępu do niej. Może to być przydatne na przykład wtedy, gdy dodasz do aplikacji multimedialnej obsługę Androida Auto, która zapewnia własne interfejs użytkownika bezpieczny dla kierowcy dla biblioteki multimediów.
Kompilacja: MediaLibraryService
Implementacja funkcji MediaLibraryService
jest podobna do implementacji funkcji MediaSessionService
, z tą różnicą, że w metodzie onGetSession()
zwracasz wartość MediaLibrarySession
zamiast MediaSession
.
Kotlin
class PlaybackService : MediaLibraryService() { var mediaLibrarySession: MediaLibrarySession? = null var callback: MediaLibrarySession.Callback = object : MediaLibrarySession.Callback {...} // If desired, validate the controller before returning the media library session override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaLibrarySession? = mediaLibrarySession // Create your player and media library session in the onCreate lifecycle event override fun onCreate() { super.onCreate() val player = ExoPlayer.Builder(this).build() mediaLibrarySession = MediaLibrarySession.Builder(this, player, callback).build() } // Remember to release the player and media library session in onDestroy override fun onDestroy() { mediaLibrarySession?.run { player.release() release() mediaLibrarySession = null } super.onDestroy() } }
Java
class PlaybackService extends MediaLibraryService { MediaLibrarySession mediaLibrarySession = null; MediaLibrarySession.Callback callback = new MediaLibrarySession.Callback() {...}; @Override public MediaLibrarySession onGetSession(MediaSession.ControllerInfo controllerInfo) { // If desired, validate the controller before returning the media library session return mediaLibrarySession; } // Create your player and media library session in the onCreate lifecycle event @Override public void onCreate() { super.onCreate(); ExoPlayer player = new ExoPlayer.Builder(this).build(); mediaLibrarySession = new MediaLibrarySession.Builder(this, player, callback).build(); } // Remember to release the player and media library session in onDestroy @Override public void onDestroy() { if (mediaLibrarySession != null) { mediaLibrarySession.getPlayer().release(); mediaLibrarySession.release(); mediaLibrarySession = null; } super.onDestroy(); } }
Pamiętaj, aby w pliku manifestu zadeklarować Service
i wymagane uprawnienia:
<service
android:name=".PlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="true">
<intent-filter>
<action android:name="androidx.media3.session.MediaSessionService"/>
</intent-filter>
</service>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- For targetSdk 34+ -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
Użyj MediaLibrarySession
Interfejs API MediaLibraryService
wymaga, aby Twoja biblioteka multimediów była ustrukturyzowana w formacie drzewa z pojedynczym węzłem głównym i węzłami podrzędnymi, które mogą być odtwarzane lub przeglądane.
MediaLibrarySession
rozszerza interfejs API MediaSession
, aby dodać interfejsy API przeglądania treści. W porównaniu z MediaSession
wywołaniem zwrotnym wywołanie zwrotne MediaLibrarySession
zawiera takie metody jak:
onGetLibraryRoot()
(gdy klient poprosi o korzeńMediaItem
drzewa treści)onGetChildren()
gdy klient prosi o podanie elementów podrzędnych elementuMediaItem
w drzewie treścionGetSearchResult()
dla przypadku, gdy klient żąda wyników wyszukiwania z drzewa treści dla danego zapytania
Odpowiednie metody wywołania będą zawierać obiekt LibraryParams
z dodatkowymi sygnałami o typie drzewa treści, którym zainteresowana jest aplikacja klienta.