Un contrôleur multimédia interagit avec une session multimédia pour interroger et contrôler un contenu multimédia
la lecture de votre application. Dans Media3, l'API MediaController
implémente l'interface Player
. Exemples d'applications clientes qui utilisent un média
contrôleurs comprennent:
- Commandes multimédias du système Android
- Application associée Android Wear OS
- Android Auto et Automotive OS
- Assistants vocaux, comme l'Assistant Google
- L'application Media Controller Test
Un contrôleur multimédia peut également être utile dans une application multimédia, par exemple si le lecteur et la session multimédia résident dans un Service
distinct de l'Activity
ou de l'Fragment
avec l'UI.
Créer un élément MediaController
Pour créer un MediaController
, commencez par créer un SessionToken
pour le
la classe MediaSession
correspondante. La méthode onStart()
de votre Activity
ou Fragment
peut être un bon endroit pour cela.
val sessionToken = SessionToken(context, ComponentName(context, PlaybackService::class.java))
SessionToken sessionToken = new SessionToken(context, new ComponentName(context, PlaybackService.class));
L'utilisation de cet SessionToken
pour créer ensuite un MediaController
connecte le contrôleur à la session donnée. Cette opération s'effectue de manière asynchrone,
écouter le résultat et l'utiliser
lorsqu'il est disponible.
val controllerFuture = MediaController.Builder(context, sessionToken).buildAsync() controllerFuture.addListener({ // MediaController is available here with controllerFuture.get() }, MoreExecutors.directExecutor())
ListenableFuture<MediaController> controllerFuture = new MediaController.Builder(context, sessionToken).buildAsync(); controllerFuture.addListener(() -> { // MediaController is available here with controllerFuture.get() }, MoreExecutors.directExecutor());
Utiliser un MediaController
MediaController
implémente l'interface Player
, ce qui vous permet d'utiliser les commandes
définies dans l'interface pour contrôler la lecture du MediaSession
connecté.
Autrement dit, l'appel de play()
sur un MediaController
envoie la commande au MediaSession
connecté, qui la délègue ensuite à son Player
sous-jacent.
De même, vous pouvez ajouter un Player.Listener
à la manette pour écouter
les changements d'état Player
. Pour en savoir plus sur l'utilisation d'un Player.Listener
, consultez le guide sur les événements du lecteur. MediaController.Listener
définit des rappels supplémentaires pour les événements et les commandes entrantes à partir de
MediaSession
connectées, telles que
onAvailableSessionCommandsChanged()
lorsque la session multimédia modifie les commandes de session disponibles et
onDisconnected()
lorsque le contrôleur est déconnecté de la session.
Comme pour les autres composants, n'oubliez pas de libérer le MediaController
lorsqu'il
dont vous n'avez plus besoin, comme dans la méthode onStop()
d'un Activity
ou
Fragment
MediaController.releaseFuture(controllerFuture)
MediaController.releaseFuture(controllerFuture);
En libérant le contrôleur, vous obtiendrez toujours toutes les commandes en attente envoyées au une session et ne se dissocier du service de session qu'une fois que ces commandes ont ou après un délai d'inactivité, selon la situation qui se présente en premier.
Créer et utiliser un MediaBrowser
Un MediaBrowser
s'appuie sur les fonctionnalités proposées par un MediaController
pour permettre également de parcourir la bibliothèque multimédia proposée par le MediaLibraryService
d'une application multimédia.
val browserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync() browserFuture.addListener({ // MediaBrowser is available here with browserFuture.get() }, MoreExecutors.directExecutor())
ListenableFuture<MediaBrowser> browserFuture = new MediaBrowser.Builder(context, sessionToken).buildAsync(); browserFuture.addListener(() -> { // MediaBrowser is available here with browserFuture.get() }, MoreExecutors.directExecutor());
Pour commencer à parcourir la bibliothèque de contenu de l'application multimédia, récupérez d'abord le nœud racine avec getLibraryRoot()
:
// Get the library root to start browsing the library tree. val rootFuture = mediaBrowser.getLibraryRoot(/* params= */ null) rootFuture.addListener({ // Root node MediaItem is available here with rootFuture.get().value }, MoreExecutors.directExecutor())
// Get the library root to start browsing the library tree. ListenableFuture<LibraryResult<MediaItem>> rootFuture = mediaBrowser.getLibraryRoot(/* params= */ null); rootFuture.addListener(() -> { // Root node MediaItem is available here with rootFuture.get().value }, MoreExecutors.directExecutor());
Vous pouvez ensuite parcourir la bibliothèque multimédia en récupérant les enfants d'une
MediaItem
dans la bibliothèque avec getChildren()
. Par exemple, pour récupérer
enfants du nœud racine MediaItem
:
// Get the library root to start browsing the library tree. val childrenFuture = mediaBrowser.getChildren(rootMediaItem.mediaId, 0, Int.MAX_VALUE, null) childrenFuture.addListener({ // List of children MediaItem nodes is available here with // childrenFuture.get().value }, MoreExecutors.directExecutor())
ListenableFuture<LibraryResult<ImmutableList<MediaItem>>> childrenFuture = mediaBrowser.getChildren(rootMediaItem.mediaId, 0, Integer.MAX_VALUE, null); childrenFuture.addListener(() -> { // List of children MediaItem nodes is available here with // childrenFuture.get().value }, MoreExecutors.directExecutor());