Medya uygulamasına bağlan

Bir medya denetleyicisi, medyayı sorgulamak ve kontrol etmek için medya oturumuyla etkileşimde bulunur nasıl oynatıldığını kontrol edebilir. Media3'te MediaController API'si Player arayüzünü uygular. Medya kullanan istemci uygulamalarına örnekler denetleyici şunları içerir:

Medya denetleyici, medya uygulamasında da yararlı olabilir. Örneğin, oynatıcı ve medya oturumu, kullanıcı arayüzüyle Activity veya Fragment'den ayrı bir Service'te bulunuyorsa.

MediaController oluşturma

MediaController oluşturmak üzere ilk olarak SessionToken için karşılık gelen MediaSession. Activity veya Fragment'nizin onStart() yöntemi bu konuda iyi bir başlangıç noktası olabilir.

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

Bu SessionToken'ü kullanarak MediaController oluşturmak, kumandayı belirli bir oturuma bağlar. Bu işlem eşzamanlı olarak gerçekleşmez. Bu nedenle, sonucu dinlemeniz ve kullanılabilir olduğunda kullanmanız gerekir.

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

MediaController kullan

MediaController, Player arayüzünü uyguladığından komutları kullanabilirsiniz oynatımını kontrol etmek üzere arayüzde tanımlanmış MediaSession. Yani MediaController üzerinde play() çağrısı yapıldığında komut, bağlı MediaSession'ye gönderilir. MediaSession de komutu alttaki Player'a iletir.

Benzer şekilde, dinlemek için kumandaya Player.Listener ekleyebilirsiniz Player durumundaki değişiklikler. Player.Listener kullanma hakkında daha fazla bilgi için Oyuncu etkinlikleri kılavuzunu inceleyin. MediaController.Listener arayüz, etkinlikler ve gelen komutlar için bağlı MediaSession, örneğin onAvailableSessionCommandsChanged() hem mevcut oturum komutlarını değiştirdiğinde hem de onDisconnected() oturumla bağlantısını kestiğinizde geçerli olur.

Diğer bileşenlerde olduğu gibi, artık ihtiyaç duyulmadığında MediaController'yi serbest bırakmayı unutmayın (ör. Activity veya Fragment'ın onStop() yönteminde).

KotlinJava
MediaController.releaseFuture(controllerFuture)
MediaController.releaseFuture(controllerFuture);

Denetleyicinin serbest bırakılması, oturuma gönderilen bekleyen tüm komutların gönderilmesine devam eder ve yalnızca bu komutlar işlendikten sonra veya bir zaman aşımı süresinden sonra (hangisi önce gerçekleşirse) oturum hizmetinden bağlantıyı kaldırır.

MediaBrowser oluşturma ve kullanma

MediaBrowser, bir reklamverenin sunduğu Bir medyanın sunduğu medya kitaplığına göz atmayı da etkinleştirmek için MediaController uygulamanın MediaLibraryService cihazı.

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

Medya uygulamasının içerik kitaplığına göz atmaya başlamak için önce kök düğümü alın getLibraryRoot() ile:

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

Ardından, getChildren() ile kitaplıktaki bir MediaItem öğesinin alt öğelerini alarak medya kitaplığında gezinebilirsiniz. Örneğin, MediaItem kök düğümünün alt öğeleri:

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