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 libreria multimediale.
Un elemento MediaLibraryService
fornisce un'API standardizzata per pubblicare e accedere alla tua
libreria multimediale. Ciò può essere utile, ad esempio, quando aggiungi il supporto di Android Auto alla tua app multimediale, che fornisce una propria UI sicura per il conducente per la tua raccolta multimediale.
Crea un MediaLibraryService
L'implementazione di MediaLibraryService
è simile all'implementazione di un MediaSessionService
, ad eccezione del fatto che nel metodo onGetSession()
dovresti restituire un MediaLibrarySession
anziché 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(); } }
Ricordati di dichiarare Service
e le autorizzazioni richieste anche nel file manifest:
<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 formato ad albero, con un singolo nodo radice e nodi secondari che potrebbero essere riproducibili o ulteriormente sfogliabili.
Un elemento MediaLibrarySession
estende l'API MediaSession
per aggiungere API per la navigazione di contenuti. Rispetto al callback MediaSession
, il callback MediaLibrarySession
aggiunge metodi quali:
onGetLibraryRoot()
per quando un client richiede il valoreMediaItem
principale di una struttura ad albero dei contenutionGetChildren()
per quando un cliente richiede i figli diMediaItem
nella struttura ad albero dei contenutionGetSearchResult()
per quando un client richiede risultati di ricerca dalla struttura ad albero dei contenuti per una determinata query
I metodi di callback pertinenti includeranno un oggetto LibraryParams
con indicatori aggiuntivi sul tipo di albero dei contenuti a cui è interessata un'app client.