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'si 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ı
Medya denetleyici, medya uygulamasında da yararlı 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 üzere ilk olarak SessionToken
için
karşılık gelen MediaSession
. Activity
veya Fragment
'nizin onStart()
yöntemi bu konuda iyi bir başlangıç noktası olabilir.
val sessionToken = SessionToken(context, ComponentName(context, PlaybackService::class.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.
val controllerFuture = MediaController.Builder(context, sessionToken).buildAsync() controllerFuture.addListener({ // MediaController is available here with controllerFuture.get() }, MoreExecutors.directExecutor())
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
üzerinde play()
çağrısı yapıldığında komut, bağlı MediaSession
'ye gönderilir. MediaSession
de komutu alttaki Player
'a iletir.
Benzer şekilde, dinlemek için kumandaya Player.Listener
ekleyebilirsiniz
Player
durumundaki değişiklikler. Player.Listener
kullanma hakkında daha fazla bilgi için Oyuncu etkinlikleri kılavuzunu inceleyin. 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, artık ihtiyaç duyulmadığında MediaController
'yi serbest bırakmayı unutmayın (ör. Activity
veya Fragment
'ın onStop()
yönteminde).
MediaController.releaseFuture(controllerFuture)
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 reklamverenin sunduğu
Bir medyanın sunduğu medya kitaplığına göz atmayı da etkinleştirmek için MediaController
uygulamanın MediaLibraryService
cihazı.
val browserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync() browserFuture.addListener({ // MediaBrowser is available here with browserFuture.get() }, MoreExecutors.directExecutor())
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:
// 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())
// 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 öğeleri:
// 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())
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());