Se connecter à une application multimédia

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, le MediaController L'API implémente l'interface Player. Exemples d'applications clientes qui utilisent un média contrôleurs comprennent:

Un contrôleur multimédia peut également être utile dans une application multimédia, par exemple si le et la session multimédia se trouvent dans un Service distinct de Activity ou 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 emplacement pour cela.

Kotlin

val sessionToken = 
  SessionToken(context, ComponentName(context, PlaybackService::class.java))

Java

SessionToken sessionToken = 
  new SessionToken(context, new ComponentName(context, PlaybackService.class));

L'utilisation de ce SessionToken pour créer un MediaController connecte ensuite 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.

Kotlin

val controllerFuture =
  MediaController.Builder(context, sessionToken).buildAsync()
controllerFuture.addListener({
  // MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor())

Java

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é. Cela signifie que le fait d'appeler play() sur un MediaController envoie à l'instance MediaSession connectée, qui 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. Consultez le Guide sur les événements du lecteur pour en savoir plus sur l'utilisation d'un Player.Listener. 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

Kotlin

MediaController.releaseFuture(controllerFuture)

Java

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 offertes par un MediaController pour permettre également de parcourir la bibliothèque multimédia proposée par un contenu multimédia. MediaLibraryService de l'application.

Kotlin

val browserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync()
browserFuture.addListener({
  // MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor())

Java

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():

Kotlin

// 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())

Java

// 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:

Kotlin

// 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())

Java

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());