Les applications multimédias contiennent souvent des collections d'éléments multimédias organisés de façon hiérarchique. Il peut s'agir, par exemple, des chansons d'un album ou des épisodes de séries TV d'une playlist. Cette hiérarchie de éléments multimédias est connue sous le nom de bibliothèque multimédia.
<ph type="x-smartling-placeholder">Un MediaLibraryService
fournit une API standardisée pour diffuser et accéder à vos
bibliothèque multimédia. Cela peut être utile, par exemple, pour prendre en charge
Android Auto à votre application multimédia, qui fournit sa propre
pour votre bibliothèque multimédia.
Créer un MediaLibraryService
L'implémentation d'un MediaLibraryService
est semblable à
implémenter un MediaSessionService
;
sauf que dans la méthode onGetSession()
, vous devez
renvoie un MediaLibrarySession
au lieu d'un 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(); } }
N'oubliez pas de déclarer votre Service
et les autorisations requises dans le fichier manifeste
ainsi que:
<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" />
Utiliser un MediaLibrarySession
L'API MediaLibraryService
s'attend à ce que votre bibliothèque multimédia soit structurée selon un
avec un seul nœud racine et des nœuds enfants
jouable
ou explorables plus en détail.
Un MediaLibrarySession
étend l'API MediaSession
pour ajouter des API de navigation de contenu. Par rapport aux
Rappel MediaSession
,
le rappel MediaLibrarySession
ajoute des méthodes telles que:
onGetLibraryRoot()
lorsqu'un client demande la racineMediaItem
d'une arborescence de contenuonGetChildren()
lorsqu'un client demande les enfants d'un élémentMediaItem
dans l'arborescence de contenuonGetSearchResult()
lorsqu'un client demande des résultats de recherche dans l'arborescence de contenu pour une requête
Les méthodes de rappel pertinentes incluront un LibraryParams
objet avec des signaux supplémentaires sur le type d'arborescence de contenu qu'une application cliente
qui vous intéresse.