Android TV uygulamalarında yayınlama özelliğini kullan

1. Genel Bakış

Google Cast logosu

Bu codelab'de, mevcut Android TV uygulamasını, yayınlamayı ve mevcut Cast gönderen uygulamalarınızdan iletişimi destekleyecek şekilde nasıl değiştireceğinizi öğreneceksiniz.

Google Cast ve Cast Connect nedir?

Google Cast, kullanıcıların mobil cihazdaki içerikleri TV'ye yayınlamasına olanak tanır. Tipik bir Google Cast oturumu, gönderen ve alıcı uygulama olmak üzere iki bileşenden oluşur. Gönderen uygulamalar (ör. mobil uygulama veya Youtube.com gibi bir web sitesi), Cast alıcı uygulamasının oynatılmasını başlatır ve kontrol eder. Yayın alıcı uygulamaları, Chromecast ve Android TV cihazlarda çalışan HTML 5 uygulamalarıdır.

Cast oturumundaki durumun neredeyse tamamı alıcı uygulamada depolanır. Durum güncellendiğinde (ör. yeni bir medya öğesi yüklendiğinde) tüm gönderenlere bir medya durumu yayınlanır. Bu yayınlar, yayın oturumunun mevcut durumunu içerir. Gönderen uygulamaları, oynatma bilgilerini kullanıcı arayüzlerinde göstermek için bu medya durumunu kullanır.

Cast Connect, bu altyapı üzerine kurulur ve Android TV uygulamanız alıcı görevi görür. Cast Connect kitaplığı, Android TV uygulamanızın yayın alıcı uygulama gibi mesaj almasına ve medya durumunu yayınlamasına olanak tanır.

Ne geliştireceğiz?

Bu codelab'i tamamladığınızda, videoları Android TV uygulamasına yayınlamak için Cast gönderen uygulamalarını kullanabileceksiniz. Android TV uygulaması, Cast protokolü aracılığıyla gönderen uygulamalarıyla da iletişim kurabilir.

Neler öğreneceksiniz?

  • Cast Connect kitaplığını örnek bir ATV uygulamasına ekleme
  • Yayın gönderen cihazı bağlama ve ATV uygulamasını başlatma
  • Yayın gönderen bir uygulamadan ATV uygulamasında medya oynatmayı başlatma
  • ATV uygulamasından Cast gönderen uygulamalarına medya durumu gönderme

İhtiyacınız olanlar

2. Örnek kodu alın

Tüm örnek kodları bilgisayarınıza indirebilirsiniz...

ve indirilen ZIP dosyasını açın.

3. Örnek uygulamayı çalıştırma

Öncelikle, tamamlanmış örnek uygulamanın nasıl göründüğüne bakalım. Android TV uygulaması, Leanback kullanıcı arayüzünü ve temel bir video oynatıcıyı kullanır. Kullanıcı, listeden bir video seçebilir. Seçilen video TV'de oynatılır. Kullanıcı, beraberindeki mobil gönderen uygulamasıyla Android TV uygulamasına video da yayınlayabilir.

Bir videonun tam ekran önizlemesinin üzerinde, video küçük resimlerinden oluşan bir dizi (biri vurgulanmış) resmi; sağ üstte "Cast Connect" kelimeleri

Geliştirici cihazlarını kaydetme

Uygulama geliştirme için Cast Connect özelliklerini etkinleştirmek üzere, kullanacağınız Android TV cihazının Google Cast'inin seri numarasını Cast Geliştirici Konsolu'na kaydetmeniz gerekir. Seri numarasını Android TV'nizde Ayarlar > Cihaz tercihleri > Google Cast > Seri numarası bölümüne giderek bulabilirsiniz. Bunun fiziksel cihazınızın seri numarasından farklı olduğunu ve yukarıda açıklanan yöntemle alınması gerektiğini unutmayın.

"Google Cast" ekranını, sürüm numarasını ve seri numarasını gösteren bir Android TV ekranının resmi

Cast Connect, güvenlik nedeniyle kayıt olmadan yalnızca Google Play Store'dan yüklenen uygulamalarda çalışır. Kayıt işlemini başlattıktan 15 dakika sonra cihazınızı yeniden başlatın.

Android gönderen uygulamasını yükleme

Mobil cihazdan istek göndermeyi test etmek için kaynak kodu zip indirme işleminde Cast Videos as mobile-sender-0629.apk file adlı basit bir gönderen uygulaması sağladık. APK'yı yüklemek için ADB'den yararlanacağız. Cast Videos'un farklı bir sürümünü zaten yüklediyseniz devam etmeden önce lütfen bu sürümü cihazdaki tüm profillerden kaldırın.

  1. Android telefonunuzda geliştirici seçeneklerini ve USB üzerinden hata ayıklamayı etkinleştirin.
  2. Android telefonunuzu geliştirme yaptığınız bilgisayara bağlamak için USB veri kablosu takın.
  3. mobile-sender-0629.apk uygulamasını Android telefonunuza yükleyin.

mobile-sender.apk'yı yüklemek için adb install komutunun çalıştırıldığı bir terminal penceresinin resmi

  1. Videoları Yayınla gönderen uygulamasını Android telefonunuzda bulabilirsiniz. Cast Videos gönderen uygulama simgesi

Android telefon ekranında çalışan Cast Videos gönderen uygulamasının resmi

Android TV uygulamasını yükleme

Aşağıdaki talimatlarda, tamamlanan örnek uygulamanın Android Studio'da nasıl açılıp çalıştırılacağı açıklanmaktadır:

  1. Karşılama ekranında Projeyi İçe Aktar'ı veya Dosya > Yeni > Projeyi İçe Aktar... menü seçeneklerini belirleyin.
  2. Örnek kod klasöründen klasör simgesiapp-done dizinini seçip Tamam'ı tıklayın.
  3. File > Android App Studio'nun Projeyi Gradle ile Senkronize Et düğmesi Sync Project with Gradle Files'ı (Dosya > Android App Studio'nun Projeyi Gradle ile Senkronize Et düğmesi Projeyi Gradle Dosyalarıyla Senkronize Et) tıklayın.
  4. Android TV cihazınızda geliştirici seçeneklerini ve USB üzerinden hata ayıklamayı etkinleştirin.
  5. Android TV cihazınızla ADB bağlantısı kurun. Cihaz, Android Studio'da gösterilmelidir. Android Studio araç çubuğunda görünen Android TV cihazını gösteren resim
  6. Android Studio'daki Çalıştır düğmesi, sağa bakan yeşil üçgenRun (Çalıştır) düğmesini tıkladığınızda birkaç saniye sonra Cast Connect Codelab adlı ATV uygulamasının göründüğünü görürsünüz.

ATV uygulamasıyla Cast Connect oynayalım

  1. Android TV ana ekranına gidin.
  2. Android telefonunuzda Cast Videos gönderen uygulamasını açın. Yayınla düğmesini Yayın düğmesi simgesi tıklayın ve ATV cihazınızı seçin.
  3. ATV'nizde Cast Connect Codelab ATV uygulaması başlatılır ve gönderen cihazınızdaki yayınla düğmesi, bağlantının kurulduğunu gösterir Ters renklere sahip yayın düğmesi simgesi.
  4. ATV uygulamasından bir video seçtiğinizde video, ATV'nizde oynatılmaya başlar.
  5. Mobil telefonunuzda, gönderen uygulamanızın alt kısmında artık mini bir kontrol cihazı görünüyor. Oynatmayı kontrol etmek için oynatma/duraklatma düğmesini kullanabilirsiniz.
  6. Cep telefonundan bir video seçip oynatın. Video, ATV'nizde oynatılmaya başlar ve genişletilmiş kumanda, gönderen mobil cihazınızda gösterilir.
  7. Telefonunuzu kilitleyin. Kilidi açtığınızda, medya oynatmayı kontrol etmek veya yayını durdurmak için kilit ekranında bir bildirim görürsünüz.

Android telefon ekranının bir bölümünde video oynatan mini oynatıcının resmi

4. Başlangıç projesini hazırlama

Tamamlanan uygulamanın Cast Connect entegrasyonunu doğruladığımıza göre, indirdiğiniz başlangıç uygulamasına Cast Connect desteği eklememiz gerekiyor. Artık Android Studio'yu kullanarak başlangıç projesinin üzerine geliştirme yapmaya hazırsınız:

  1. Karşılama ekranında Projeyi İçe Aktar'ı veya Dosya > Yeni > Projeyi İçe Aktar... menü seçeneklerini belirleyin.
  2. Örnek kod klasöründen klasör simgesiapp-start dizinini seçip Tamam'ı tıklayın.
  3. File > Android Studio'nun Projeyi Gradle ile Senkronize Et düğmesi Sync Project with Gradle Files'ı (Dosya > Android Studio'nun Projeyi Gradle ile Senkronize Et düğmesi Projeyi Gradle Dosyalarıyla Senkronize Et) tıklayın.
  4. ATV cihazını seçin ve uygulamayı çalıştırıp kullanıcı arayüzünü keşfetmek için Android Studio'nun Çalıştır düğmesi, sağa bakan yeşil üçgenÇalıştır düğmesini tıklayın. Seçili Android TV cihazını gösteren Android Studio araç çubuğu

Bir videonun tam ekran önizlemesinin üzerinde, video küçük resimlerinden oluşan bir dizi (biri vurgulanmış) resmi; sağ üstte "Cast Connect" kelimeleri

Uygulama tasarımı

Uygulama, kullanıcının göz atabileceği bir video listesi sunuyor. Kullanıcılar Android TV'de oynatılacak bir video seçebilir. Uygulama iki ana etkinlikten oluşur: MainActivity ve PlaybackActivity.

MainActivity

Bu etkinlik bir Fragment (MainFragment) içeriyor. Videoların listesi ve ilişkili meta verileri MovieList sınıfında yapılandırılıyor ve Movie nesnelerinin listesini oluşturmak için setupMovies() yöntemi çağrılıyor.

Bir Movie nesnesi, başlık, açıklama, resim küçük resimleri ve video URL'si içeren bir video öğesini temsil eder. Her Movie nesnesi, video küçük resmini başlık ve stüdyo ile birlikte sunmak için bir CardPresenter'ye bağlanır ve ArrayObjectAdapter'ye iletilir.

Bir öğe seçildiğinde, karşılık gelen Movie nesnesi PlaybackActivity öğesine iletilir.

PlaybackActivity

Bu etkinlik, ExoPlayer ile VideoView barındıran bir Fragment (PlaybackVideoFragment), bazı medya kontrolleri ve seçilen videonun açıklamasını göstermek için bir metin alanı içerir. Ayrıca kullanıcının videoyu Android TV'de oynatmasına olanak tanır. Kullanıcı, videoların oynatılmasını başlatmak/duraklatmak veya oynatma sırasında ileri/geri sarmak için uzaktan kumandayı kullanabilir.

Cast Connect'in ön koşulları

Cast Connect, Google Play Hizmetleri'nin yeni sürümlerini kullanır. Bu sürümler, ATV uygulamanızın AndroidX ad alanını kullanacak şekilde güncellenmesini gerektirir.

Android TV uygulamanızda Cast Connect'i desteklemek için medya oturumundan etkinlikler oluşturup desteklemeniz gerekir. Cast Connect kitaplığı, medya oturumunun durumuna göre medya durumu oluşturur. Medya oturumunuz, gönderenden gelen belirli mesajları (ör. duraklatma) aldığında sinyal vermek için Cast Connect kitaplığı tarafından da kullanılır.

5. Yayınlama Desteğini Yapılandırma

Bağımlılıklar

Gerekli kitaplık bağımlılıklarını eklemek için uygulama build.gradle dosyasını güncelleyin:

dependencies {
    ....

    // Cast Connect libraries
    implementation 'com.google.android.gms:play-services-cast-tv:20.0.0'
    implementation 'com.google.android.gms:play-services-cast:21.1.0'
}

Projenin hatasız oluşturulduğunu onaylamak için projeyi senkronize edin.

Başlatma

CastReceiverContext, tüm Cast etkileşimlerini koordine eden tekil bir nesnedir. CastReceiverContext başlatıldığında CastReceiverOptions sağlamak için ReceiverOptionsProvider arayüzünü uygulamanız gerekir.

CastReceiverOptionsProvider.kt dosyası oluşturun ve projeye aşağıdaki sınıfı ekleyin:

package com.google.sample.cast.castconnect

import android.content.Context
import com.google.android.gms.cast.tv.ReceiverOptionsProvider
import com.google.android.gms.cast.tv.CastReceiverOptions

class CastReceiverOptionsProvider : ReceiverOptionsProvider {
    override fun getOptions(context: Context): CastReceiverOptions {
        return CastReceiverOptions.Builder(context)
                .setStatusText("Cast Connect Codelab")
                .build()
    }
}

Ardından, uygulamanın AndroidManifest.xml dosyasının <application> etiketinde alıcı seçenekleri sağlayıcısını belirtin:

<application>
  ...
  <meta-data
    android:name="com.google.android.gms.cast.tv.RECEIVER_OPTIONS_PROVIDER_CLASS_NAME"
    android:value="com.google.sample.cast.castconnect.CastReceiverOptionsProvider" />
</application>

Yayın göndericinizden ATV uygulamanıza bağlanmak için başlatmak istediğiniz bir etkinliği seçin. Bu codelab'de, Cast oturumu başlatıldığında uygulamanın MainActivity başlatılacak. AndroidManifest.xml dosyasında, MainActivity içine başlatma intent filtresini ekleyin.

<activity android:name=".MainActivity">
  ...
  <intent-filter>
    <action android:name="com.google.android.gms.cast.tv.action.LAUNCH" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

Yayın Alıcısı Bağlamının Yaşam Döngüsü

Uygulamanız başlatıldığında CastReceiverContext başlatmalı, uygulamanız arka plana taşındığında ise CastReceiverContext durdurmalısınız. CastReceiverContext.start() ve CastReceiverContext.stop() çağrısını yönetmek için androidx.lifecycle kitaplığındaki LifecycleObserver öğesini kullanmanızı öneririz.

MyApplication.kt dosyasını açın, uygulamanın onCreate yönteminde initInstance() çağırarak yayın bağlamını başlatın. Uygulama devam ettirildiğinde AppLifeCycleObserver sınıfında start(), uygulama duraklatıldığında ise CastReceiverContext:stop()

package com.google.sample.cast.castconnect

import com.google.android.gms.cast.tv.CastReceiverContext
...

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        CastReceiverContext.initInstance(this)
        ProcessLifecycleOwner.get().lifecycle.addObserver(AppLifecycleObserver())
    }

    class AppLifecycleObserver : DefaultLifecycleObserver {
        override fun onResume(owner: LifecycleOwner) {
            Log.d(LOG_TAG, "onResume")
            CastReceiverContext.getInstance().start()
        }

        override fun onPause(owner: LifecycleOwner) {
            Log.d(LOG_TAG, "onPause")
            CastReceiverContext.getInstance().stop()
        }
    }
}

MediaSession'ı MediaManager'a bağlama

MediaManager, CastReceiverContext tekil nesnesinin bir özelliğidir. Medya durumunu yönetir, yükleme amacını işler, gönderenlerden gelen medya ad alanı mesajlarını medya komutlarına çevirir ve medya durumunu gönderenlere geri gönderir.

Bir MediaSession oluşturduğunuzda, komutları nereye göndereceğini ve medya oynatma durumunu nereden alacağını bilmesi için MediaManager'a mevcut MediaSession jetonunu da sağlamanız gerekir. PlaybackVideoFragment.kt dosyasında, jetonu MediaManager olarak ayarlamadan önce MediaSession öğesinin başlatıldığından emin olun.

import com.google.android.gms.cast.tv.CastReceiverContext
import com.google.android.gms.cast.tv.media.MediaManager
...

class PlaybackVideoFragment : VideoSupportFragment() {
    private var castReceiverContext: CastReceiverContext? = null
    ...

    private fun initializePlayer() {
        if (mPlayer == null) {
            ...
            mMediaSession = MediaSessionCompat(getContext(), LOG_TAG)
            ...
            castReceiverContext = CastReceiverContext.getInstance()
            if (castReceiverContext != null) {
                val mediaManager: MediaManager = castReceiverContext!!.getMediaManager()
                mediaManager.setSessionCompatToken(mMediaSession!!.getSessionToken())
            }

        }
    }
}

Etkin olmayan oynatma nedeniyle MediaSession öğesini serbest bıraktığınızda MediaManager üzerinde boş bir jeton ayarlamanız gerekir:

private fun releasePlayer() {
    mMediaSession?.release()
    castReceiverContext?.mediaManager?.setSessionCompatToken(null)
    ...
}

Örnek uygulamayı çalıştıralım

Uygulamayı ATV cihazınıza dağıtmak için Android Studio&#39;nun Çalıştır düğmesi, sağa bakan yeşil üçgenÇalıştır düğmesini tıklayın, uygulamayı kapatın ve ATV ana ekranına dönün. Göndereninizden Yayınla düğmesini Yayın düğmesi simgesi tıklayın ve ATV cihazınızı seçin. ATV uygulamasının ATV cihazında başlatıldığını ve yayın düğmesinin bağlı olduğunu görürsünüz.

6. Medya Yükleniyor

Yükleme komutu, geliştirici konsolunda tanımladığınız paket adıyla birlikte bir amaç üzerinden gönderilir. Bu intent'i alacak hedef etkinliği belirtmek için Android TV uygulamanıza aşağıdaki önceden tanımlanmış intent filtresini eklemeniz gerekir. AndroidManifest.xml dosyasında, yükleme intent filtresini PlayerActivity öğesine ekleyin:

<activity android:name="com.google.sample.cast.castconnect.PlaybackActivity"
          android:launchMode="singleTask"
          android:exported="true">
  <intent-filter>
     <action android:name="com.google.android.gms.cast.tv.action.LOAD"/>
     <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

Android TV'de Yükleme İsteklerini İşleme

Etkinlik, yükleme isteği içeren bu amaçlı işlemleri alacak şekilde yapılandırıldığına göre bu işlemleri ele almamız gerekir.

Uygulama, etkinlik başladığında processIntent adlı özel bir yöntemi çağırır. Bu yöntemde, gelen amaçların işlenmesiyle ilgili mantık yer alır. Bir yükleme isteğini işlemek için bu yöntemi değiştiririz ve MediaManager örneğinin onNewIntent yöntemi çağrılarak daha fazla işlenmesi için amaç gönderilir. MediaManager, amacın yükleme isteği olduğunu algılarsa MediaLoadRequestData nesnesini amaçtan çıkarır ve MediaLoadCommandCallback.onLoad() işlevini çağırır. Yükleme isteğini içeren amaca yönelik işlemi gerçekleştirmek için PlaybackVideoFragment.kt dosyasındaki processIntent yöntemini değiştirin:

fun processIntent(intent: Intent?) {
    val mediaManager: MediaManager = CastReceiverContext.getInstance().getMediaManager()
    // Pass intent to Cast SDK
    if (mediaManager.onNewIntent(intent)) {
        return
    }

    // Clears all overrides in the modifier.
    mediaManager.getMediaStatusModifier().clear()

    // If the SDK doesn't recognize the intent, handle the intent with your own logic.
    ...
}

Ardından, MediaManager tarafından çağrılan onLoad() yöntemini geçersiz kılacak olan MediaLoadCommandCallback soyut sınıfını genişleteceğiz. Bu yöntem, yükleme isteğinin verilerini alır ve bunları Movie nesnesine dönüştürür. Dönüştürülen filmi yerel oynatıcı oynatır. MediaManager daha sonra MediaLoadRequest ile güncellenir ve MediaStatus, bağlı gönderenlere yayınlanır. PlaybackVideoFragment.kt dosyasında MyMediaLoadCommandCallback adlı iç içe yerleştirilmiş bir özel sınıf oluşturun:

import com.google.android.gms.cast.MediaLoadRequestData
import com.google.android.gms.cast.MediaInfo
import com.google.android.gms.cast.MediaMetadata
import com.google.android.gms.cast.MediaError
import com.google.android.gms.cast.tv.media.MediaException
import com.google.android.gms.cast.tv.media.MediaCommandCallback
import com.google.android.gms.cast.tv.media.QueueUpdateRequestData
import com.google.android.gms.cast.tv.media.MediaLoadCommandCallback
import com.google.android.gms.tasks.Task
import com.google.android.gms.tasks.Tasks
import android.widget.Toast
...

private inner class MyMediaLoadCommandCallback :  MediaLoadCommandCallback() {
    override fun onLoad(
        senderId: String?, mediaLoadRequestData: MediaLoadRequestData): Task<MediaLoadRequestData> {
        Toast.makeText(activity, "onLoad()", Toast.LENGTH_SHORT).show()
        return if (mediaLoadRequestData == null) {
            // Throw MediaException to indicate load failure.
            Tasks.forException(MediaException(
                MediaError.Builder()
                    .setDetailedErrorCode(MediaError.DetailedErrorCode.LOAD_FAILED)
                    .setReason(MediaError.ERROR_REASON_INVALID_REQUEST)
                    .build()))
        } else Tasks.call {
            play(convertLoadRequestToMovie(mediaLoadRequestData)!!)
            // Update media metadata and state
            val mediaManager = castReceiverContext!!.mediaManager
            mediaManager.setDataFromLoad(mediaLoadRequestData)
            mediaLoadRequestData
        }
    }
}

private fun convertLoadRequestToMovie(mediaLoadRequestData: MediaLoadRequestData?): Movie? {
    if (mediaLoadRequestData == null) {
        return null
    }
    val mediaInfo: MediaInfo = mediaLoadRequestData.getMediaInfo() ?: return null
    var videoUrl: String = mediaInfo.getContentId()
    if (mediaInfo.getContentUrl() != null) {
        videoUrl = mediaInfo.getContentUrl()
    }
    val metadata: MediaMetadata = mediaInfo.getMetadata()
    val movie = Movie()
    movie.videoUrl = videoUrl
    movie.title = metadata?.getString(MediaMetadata.KEY_TITLE)
    movie.description = metadata?.getString(MediaMetadata.KEY_SUBTITLE)
    if(metadata?.hasImages() == true) {
        movie.cardImageUrl = metadata.images[0].url.toString()
    }
    return movie
}

Geri çağırma işlevi tanımlandığına göre, bunu MediaManager'ya kaydetmemiz gerekir. Geri çağırma, MediaManager.onNewIntent() çağrılmadan önce kaydedilmelidir. Oynatıcı başlatıldığında setMediaLoadCommandCallback ekleyin:

private fun initializePlayer() {
    if (mPlayer == null) {
        ...
        mMediaSession = MediaSessionCompat(getContext(), LOG_TAG)
        ...
        castReceiverContext = CastReceiverContext.getInstance()
        if (castReceiverContext != null) {
            val mediaManager: MediaManager = castReceiverContext.getMediaManager()
            mediaManager.setSessionCompatToken(mMediaSession.getSessionToken())
            mediaManager.setMediaLoadCommandCallback(MyMediaLoadCommandCallback())
        }
    }
}

Örnek uygulamayı çalıştıralım

Uygulamayı ATV cihazınıza dağıtmak için Android Studio&#39;nun Çalıştır düğmesi, sağa bakan yeşil üçgenÇalıştır düğmesini tıklayın. Göndereninizden Yayınla düğmesini Yayın düğmesi simgesi tıklayın ve ATV cihazınızı seçin. ATV uygulaması, ATV cihazında başlatılır. Mobil cihazda bir video seçtiğinizde video ATV'de oynatılmaya başlar. Oynatma kontrollerinin bulunduğu telefonunuzda bildirim alıp almadığınızı kontrol edin. Duraklatma gibi kontrolleri kullanmayı deneyin. ATV cihazındaki video duraklatılmalıdır.

7. Cast kontrol komutlarını destekleme

Mevcut uygulama artık oynatma, duraklatma ve arama gibi medya oturumuyla uyumlu temel komutları destekliyor. Ancak medya oturumunda kullanılamayan bazı Cast kontrol komutları vardır. Bu Cast kontrol komutlarını desteklemek için MediaCommandCallback kaydetmeniz gerekir.

Oynatıcı başlatıldığında setMediaCommandCallback kullanarak MyMediaCommandCallback öğesini MediaManager örneğine ekleyin:

private fun initializePlayer() {
    ...
    castReceiverContext = CastReceiverContext.getInstance()
    if (castReceiverContext != null) {
        val mediaManager = castReceiverContext!!.mediaManager
        ...
        mediaManager.setMediaCommandCallback(MyMediaCommandCallback())
    }
}

Aşağıdaki Cast kontrol komutlarını desteklemek için MyMediaCommandCallback sınıfını oluşturarak onQueueUpdate() gibi yöntemleri geçersiz kılın:

private inner class MyMediaCommandCallback : MediaCommandCallback() {
    override fun onQueueUpdate(
        senderId: String?,
        queueUpdateRequestData: QueueUpdateRequestData
    ): Task<Void> {
        Toast.makeText(getActivity(), "onQueueUpdate()", Toast.LENGTH_SHORT).show()
        // Queue Prev / Next
        if (queueUpdateRequestData.getJump() != null) {
            Toast.makeText(
                getActivity(),
                "onQueueUpdate(): Jump = " + queueUpdateRequestData.getJump(),
                Toast.LENGTH_SHORT
            ).show()
        }
        return super.onQueueUpdate(senderId, queueUpdateRequestData)
    }
}

8. Medya durumuyla çalışma

Medya durumunu değiştirme

Cast Connect, temel medya durumunu medya oturumundan alır. Android TV uygulamanız, ileri seviye özellikleri desteklemek için MediaStatusModifier üzerinden ek durum özellikleri belirtebilir ve geçersiz kılabilir. MediaStatusModifier her zaman CastReceiverContext'da ayarladığınız MediaSession üzerinde çalışır.

Örneğin, onLoad geri çağırma işlevi tetiklendiğinde setMediaCommandSupported değerini belirtmek için:

import com.google.android.gms.cast.MediaStatus
...
private class MyMediaLoadCommandCallback : MediaLoadCommandCallback() {
    fun onLoad(
        senderId: String?,
        mediaLoadRequestData: MediaLoadRequestData
    ): Task<MediaLoadRequestData> {
        Toast.makeText(getActivity(), "onLoad()", Toast.LENGTH_SHORT).show()
        ...
        return Tasks.call({
            play(convertLoadRequestToMovie(mediaLoadRequestData)!!)
            ...
            // Use MediaStatusModifier to provide additional information for Cast senders.
            mediaManager.getMediaStatusModifier()
                .setMediaCommandSupported(MediaStatus.COMMAND_QUEUE_NEXT, true)
                .setIsPlayingAd(false)
            mediaManager.broadcastMediaStatus()
            // Return the resolved MediaLoadRequestData to indicate load success.
            mediaLoadRequestData
        })
    }
}

Göndermeden Önce MediaStatus'u Yakalama

Web alıcı SDK'sındaki MessageInterceptor'ya benzer şekilde, bağlı gönderenlere yayınlanmadan önce MediaStatus'nizde ek değişiklikler yapmak için MediaManager'nizde bir MediaStatusWriter belirtebilirsiniz.

Örneğin, mobil gönderenlere göndermeden önce MediaStatus alanında özel veriler ayarlayabilirsiniz:

import com.google.android.gms.cast.tv.media.MediaManager.MediaStatusInterceptor
import com.google.android.gms.cast.tv.media.MediaStatusWriter
import org.json.JSONObject
import org.json.JSONException
...

private fun initializePlayer() {
    if (mPlayer == null) {
        ...
        if (castReceiverContext != null) {
            ...
            val mediaManager: MediaManager = castReceiverContext.getMediaManager()
            ...
            // Use MediaStatusInterceptor to process the MediaStatus before sending out.
            mediaManager.setMediaStatusInterceptor(
                MediaStatusInterceptor { mediaStatusWriter: MediaStatusWriter ->
                    try {
                        mediaStatusWriter.setCustomData(JSONObject("{myData: 'CustomData'}"))
                    } catch (e: JSONException) {
                        Log.e(LOG_TAG,e.message,e);
                    }
            })
        }
    }
}        

9. Tebrikler

Artık Cast Connect kitaplığını kullanarak Android TV uygulamalarında Cast'i nasıl etkinleştireceğinizi biliyorsunuz.

Daha fazla bilgi için geliştirici kılavuzuna göz atın: /cast/docs/android_tv_receiver.