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, Player arayüzünü uygular. Medya kullanan istemci uygulamalarına örnekler denetleyici şunları içerir:

Bir medya denetleyicisi medya uygulamasında da yararlı olabilir. Örneğin, oynatıcı ve medya oturumu Activity ya daService Kullanıcı arayüzüyle Fragment.

Bir MediaController oluşturun

MediaController oluşturmak üzere ilk olarak SessionToken için karşılık gelen MediaSession. Activity veya cihazınızın onStart() yöntemi Fragment 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 kullanılması denetleyiciyi belirtilen oturuma geri yükleyin. Bu, eş zamansız olarak gerçekleştiğinden sonucu dinleyin ve mümkün olduğunda kullanın.

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ü uyguladığından komutları kullanabilirsiniz oynatımını kontrol etmek üzere arayüzde tanımlanmış MediaSession. Yani MediaController üzerinden play() arandığında komutunu çalıştırın. Bu komut, daha sonraMediaSession Player komutuna ekleyin.

Benzer şekilde, dinlemek için kumandaya Player.Listener ekleyebilirsiniz Player durumundaki değişiklikler. Daha fazla bilgi için Oyuncu etkinlikleri rehberi Player.Listener kullanma hakkında daha fazla bilgi edinin. 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, aşağıdaki gibi olduğunda MediaController öğesini serbest bırakmayı unutmayın: Activity veya onStop() yönteminde olduğu gibi artık gerekli değil Fragment.

Kotlin

MediaController.releaseFuture(controllerFuture)

Java

MediaController.releaseFuture(controllerFuture);

Kumanda serbest bırakıldığında, kontrol paneline gönderilen tüm bekleyen komutlar da oturumu kapatmalı ve bu komutlarda bu komutlar yüklendikten sonra veya zaman aşımı süresi (hangisi önce gerçekleşirse) sona erdiyse.

Bir MediaBrowser oluşturun ve kullanın

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

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 kök düğümü alın getLibraryRoot() ile:

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, bir dosyanın alt öğelerini alarak medya kitaplığında gezinebilirsiniz. getChildren() ile kitaplıkta MediaItem. Örneğin, MediaItem kök düğümünün alt öğeleri:

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