Las apps de contenido multimedia suelen contener colecciones de elementos multimedia organizados en una jerarquía. Por ejemplo, canciones en un álbum o episodios de TV en una playlist. Esta jerarquía de elementos multimedia se conoce como biblioteca multimedia.
Un MediaLibraryService
proporciona una API estandarizada para entregar y acceder a tu biblioteca de contenido multimedia. Esto puede ser útil, por ejemplo, cuando agregas compatibilidad con Android Auto a tu app de música, que proporciona su propia IU segura para el conductor para tu biblioteca de música.
Compila un MediaLibraryService
La implementación de un MediaLibraryService
es similar a implementar un MediaSessionService
, excepto que, en el método onGetSession()
, debes mostrar un MediaLibrarySession
en lugar de 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(); } }
Recuerda declarar tu Service
y los permisos necesarios en el archivo de manifiesto también:
<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 de contenido multimedia esté estructurada en un formato de árbol, con un solo nodo raíz y nodos secundarios que puedan reproducirse o explorarse.
Un MediaLibrarySession
extiende la API de MediaSession
para agregar APIs de navegación de contenido. En comparación con la devolución de llamada MediaSession
, la devolución de llamada MediaLibrarySession
agrega métodos como los siguientes:
onGetLibraryRoot()
para cuando un cliente solicita elMediaItem
raíz 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 la búsqueda del árbol de contenido para una búsqueda determinada
Los métodos de devolución de llamada relevantes incluirán un objeto LibraryParams
con indicadores adicionales sobre el tipo de árbol de contenido que le interesa a una app cliente.