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