Le app multimediali spesso contengono raccolte di elementi multimediali, organizzati in una gerarchia. Ad esempio, i brani di un album o le puntate TV di una playlist. Questa gerarchia di elementi multimediali è nota come media Library.
Un MediaLibraryService
fornisce un'API standardizzata per la pubblicazione e l'accesso ai tuoi
raccolta multimediale. Ciò può essere utile, ad esempio, quando si aggiunge il supporto di
Android Auto all'app multimediale, che fornisce una sua
per la tua raccolta multimediale.
Crea un MediaLibraryService
L'implementazione di un MediaLibraryService
è simile all'implementazione
l'implementazione di un MediaSessionService
,
tranne che nel metodo onGetSession()
, devi
restituisce MediaLibrarySession
invece di 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(); } }
Ricordati di dichiarare Service
e le autorizzazioni richieste nel file manifest
anche:
<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" />
Usa un MediaLibrarySession
L'API MediaLibraryService
prevede che la raccolta multimediale sia strutturata in un
ad albero, con un singolo nodo radice e nodi figlio che possono essere
riproducibile
o ulteriormente sfogliabile.
Un MediaLibrarySession
estende l'API MediaSession
per aggiungere API di navigazione dei contenuti. Rispetto alla
chiamata di MediaSession
,
il callback MediaLibrarySession
aggiunge metodi come:
onGetLibraryRoot()
quando un client richiede la radiceMediaItem
di una struttura ad albero di contenutionGetChildren()
quando un client richiede gli elementi secondari di unMediaItem
nell'albero dei contenutionGetSearchResult()
quando un client richiede i risultati di ricerca dalla struttura ad albero dei contenuti per un query
I metodi di callback pertinenti includeranno un elemento LibraryParams
con indicatori aggiuntivi sul tipo di struttura ad albero dei contenuti che un'app client
a cui interessa.