Os apps de mídia geralmente contêm coleções de itens de mídia organizados em uma hierarquia. Por exemplo, músicas em um álbum ou episódios de TV em uma playlist. Essa hierarquia de itens de mídia é conhecida como biblioteca de mídia.
Um MediaLibraryService
fornece uma API padronizada para servir e acessar sua
biblioteca de mídia. Isso pode ser útil, por exemplo, ao adicionar suporte ao
Android Auto ao seu app de mídia, que fornece a própria
interface segura para motoristas para a biblioteca de mídia.
Crie um MediaLibraryService
A implementação de um MediaLibraryService
é semelhante à
implementação de um MediaSessionService
.
A diferença é que, no método onGetSession()
, é necessário
retornar uma MediaLibrarySession
em vez de uma 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ão se esqueça de declarar o Service
e as permissões necessárias no arquivo de manifesto
também:
<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" />
Use um MediaLibrarySession
A API MediaLibraryService
espera que sua biblioteca de mídia seja estruturada em um
formato de árvore, com um único nó raiz e nós filhos que podem ser
reproduzidos
ou navegáveis.
Um MediaLibrarySession
estende a API MediaSession
para adicionar APIs de navegação de conteúdo. Em comparação com o
callback MediaSession
,
o callback MediaLibrarySession
adiciona métodos como:
onGetLibraryRoot()
para quando um cliente solicita oMediaItem
raiz de uma árvore de conteúdoonGetChildren()
para quando um cliente solicita os filhos de umMediaItem
na árvore de conteúdoonGetSearchResult()
para quando um cliente solicita resultados da pesquisa da árvore de conteúdo para uma determinada consulta
Os métodos de callback relevantes vão incluir um objeto LibraryParams
com outros indicadores sobre o tipo de árvore de conteúdo em que um app cliente
tem interesse.