Medya uygulamasına bağlan

Bir medya denetleyicisi, bir medya uygulamasının oynatmasını sorgulamak ve kontrol etmek için medya oturumuyla etkileşimde bulunur. Media3'te MediaController API, Player arayüzünü uygular. Medya denetleyici kullanan istemci uygulamalarına örnek olarak aşağıdakiler verilebilir:

Medya denetleyicisi, bir medya uygulaması içinde de yararlı olabilir. Örneğin, oynatıcı ve medya oturumu, Activity veya Fragment dışında bir Service içinde kullanıcı arayüzü ile yayınlanıyorsa.

MediaController oluşturun

MediaController oluşturmak için karşılık gelen MediaSession için bir SessionToken oluşturarak başlayın. Activity veya Fragment cihazınızın onStart() yöntemi bunun için iyi bir yer olabilir.

Kotlin

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

Java

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

Daha sonra bir MediaController oluşturmak için bu SessionToken öğesinin kullanılması, denetleyiciyi belirtilen oturuma bağlar. Bu işlem eşzamansız olarak gerçekleştirilir. Bu nedenle, sonucu dinlemeniz ve mümkün 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

MediaController, Player arayüzünü uygular, böylece bağlı MediaSession öğesinin oynatılmasını kontrol etmek için arayüzde tanımlanan komutları kullanabilirsiniz. Yani bir MediaController üzerinde play() çağrıldığında, komut bağlı MediaSession'ye gönderilir ve sonrasında komut, temel Player öğesine yetki verilir.

Benzer şekilde, Player durumundaki değişiklikleri dinlemek için denetleyiciye bir Player.Listener ekleyebilirsiniz. Player.Listener kullanmayla ilgili daha fazla ayrıntı için Oynatıcı etkinlikleri kılavuzuna bakın. MediaController.Listener arayüzü, medya oturumu kullanılabilir oturum komutlarını değiştirdiğinde onAvailableSessionCommandsChanged() ve kumandanın oturumla bağlantısı kesildiğinde onDisconnected() gibi etkinlikler ve bağlı MediaSession kaynağından gelen komutlar için ek geri çağırmalar tanımlar.

Diğer bileşenlerde olduğu gibi, Activity veya Fragment öğesinin onStop() yönteminde olduğu gibi artık gerekli olmadığında MediaController öğesini serbest bırakmayı unutmayın.

Kotlin

MediaController.releaseFuture(controllerFuture)

Java

MediaController.releaseFuture(controllerFuture);

Denetleyici serbest bırakıldığında, oturuma gönderilen bekleyen tüm komutlar teslim edilir ve yalnızca bu komutlar işlendikten sonra veya bir zaman aşımı süresi dolduktan sonra (hangisi önce gerçekleşirse) oturum hizmetiyle olan bağlantısı kaldırılır.

MediaBrowser oluşturup kullanma

MediaBrowser, bir medya uygulamasının MediaLibraryService tarafından sunulan medya kitaplığına göz atmayı da etkinleştirmek için MediaController tarafından sunulan özelliklere dayanarak oluşturulur.

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

Daha sonra, getChildren() ile kitaplıktaki bir MediaItem 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());