Las apps multimedia suelen contener colecciones de elementos multimedia organizados en una jerarquía. Por ejemplo, las canciones de un álbum o los episodios de TV de una playlist. Esta jerarquía de de elementos multimedia se conoce como biblioteca multimedia.
Un MediaLibraryService
proporciona una API estandarizada para entregar y acceder a tu
biblioteca multimedia. Esto puede ser útil, por ejemplo, al agregar compatibilidad con
Android Auto a tu app de música, que ofrece sus
segura para controladores para tu biblioteca multimedia.
Compila un MediaLibraryService
La implementación de un MediaLibraryService
es similar a
implementar un MediaSessionService
,
excepto que, en el método onGetSession()
, deberías
Se muestra un objeto MediaLibrarySession
en lugar de 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(); } }
Recuerda declarar tu Service
y los permisos necesarios en el archivo de manifiesto
y
<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
La API de MediaLibraryService
espera que tu biblioteca multimedia se estructure de la siguiente manera:
de árbol, con un único nodo raíz y nodos secundarios que se pueden
jugable
o que sea más explorable.
Un objeto MediaLibrarySession
Extiende la API de MediaSession
para agregar APIs de navegación de contenido. En comparación con el
Devolución de llamada MediaSession
,
la devolución de llamada MediaLibrarySession
agrega métodos como los siguientes:
onGetLibraryRoot()
para cuando un cliente solicite la raízMediaItem
de un árbol de contenidoonGetChildren()
para cuando un cliente solicita los elementos secundarios de unMediaItem
en el árbol de contenidoonGetSearchResult()
para cuando un cliente solicita resultados de búsqueda desde el árbol de contenido de un determinado consulta
Los métodos de devolución de llamada relevantes incluirán un LibraryParams
.
objeto con indicadores adicionales sobre el tipo de árbol de contenido que una app cliente
que le interesa.