Medya uygulamasına bağlan

Medya denetleyici, medya uygulamasının oynatmasını sorgulamak ve kontrol etmek için medya oturumuyla etkileşim kurar. Media3'te MediaController API'si Player arayüzünü uygular. Medya denetleyici kullanan istemci uygulamalarına örnek olarak şunlar verilebilir:

Medya denetleyici, medya uygulamasında da faydalı 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 için ilgili MediaSession için bir SessionToken oluşturarak başlayın. Activity veya Fragment'nizin onStart() yöntemi bu konuda iyi bir başlangıç noktası olabilir.

Kotlin

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

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.

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

MediaController kullanın

MediaController, Player arayüzünü uygular. Bu sayede, bağlı MediaSession cihazının oynatılmasını kontrol etmek için arayüzde tanımlanan komutları kullanabilirsiniz. Yani MediaController üzerinde play() çağrısı yapıldığında komut, bağlı MediaSession'e gönderilir. MediaSession de komutu alttaki Player'a iletir.

Benzer şekilde, Player durumundaki değişiklikleri dinlemek için kumandaya bir Player.Listener ekleyebilirsiniz. Player.Listener kullanma hakkında daha fazla bilgi için Oyuncu etkinlikleri kılavuzunu inceleyin. MediaController.Listener arayüzü, bağlı MediaSession'dan gelen etkinlikler ve komutlar için ek geri çağırma işlevleri tanımlar. Örneğin, medya oturumu mevcut oturum komutlarını değiştirdiğinde onAvailableSessionCommandsChanged() ve denetleyicinin oturumla bağlantısı kesildiğinde onDisconnected().

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).

Kotlin

MediaController.releaseFuture(controllerFuture)

Java

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 medya uygulamasının MediaLibraryService tarafından sunulan medya kitaplığına göz atmayı da sağlamak için MediaController tarafından sunulan özelliklerin üzerine inşa edilir.

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

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

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

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 öğelerini almak için:

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