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:
- Android sistemi medya kontrolleri
- Android Wear OS tamamlayıcı uygulaması
- Android Auto ve Automotive OS
- Google Asistan gibi sesli asistanlar
- Media Controller Test uygulaması
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());