Medien-Apps enthalten oft Sammlungen von Medieninhalten, die hierarchisch organisiert sind. Zum Beispiel Titel in einem Album oder Folgen von Serien in einer Playlist. Diese Hierarchie von wird als Medienbibliothek bezeichnet.
<ph type="x-smartling-placeholder">Ein MediaLibraryService
stellt eine standardisierte API für die Bereitstellung und den Zugriff auf Ihre
in der Mediathek. Das kann hilfreich sein, wenn Sie beispielsweise
Android Auto auf deine Medien-App, die eine eigene
treibersichere UI für deine Mediathek.
MediaLibraryService
erstellen
Die Implementierung eines MediaLibraryService
ähnelt der
ein MediaSessionService
implementieren,
mit der Ausnahme, dass Sie in der Methode onGetSession()
MediaLibrarySession
statt MediaSession
zurückgeben.
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(); } }
Deklariere deine Service
und die erforderlichen Berechtigungen in der Manifestdatei
Außerdem:
<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" />
MediaLibrarySession
verwenden
Die MediaLibraryService
API erwartet, dass deine Mediathek in folgender Form strukturiert ist:
Baumformat mit einem einzigen Stammknoten und untergeordneten Knoten, die möglicherweise
abspielbar
oder weiter durchsuchbar.
MediaLibrarySession
erweitert die MediaSession
API um APIs zum Durchsuchen von Inhalten. Im Vergleich zu den
MediaSession
-Callback,
MediaLibrarySession
-Callback
fügt Methoden hinzu wie:
onGetLibraryRoot()
Für wenn ein Client denMediaItem
-Stamm einer Inhaltsstruktur anfordertonGetChildren()
Für wenn ein Client die untergeordneten Elemente vonMediaItem
in der Inhaltsstruktur anfordertonGetSearchResult()
wenn ein Client Suchergebnisse aus der Inhaltsstruktur für eine bestimmte Suchanfrage
Relevante Callback-Methoden sind LibraryParams
.
Objekt mit zusätzlichen Signalen zum Typ der Inhaltsstruktur, die eine Client-App
interessiert.