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

1. Genel Bakış

Google Cast logosu

Bu codelab'de, mevcut bir Android TV uygulamasını Yayın gönderen mevcut uygulamalarınızdan yayın ve iletişimi destekleyecek şekilde nasıl değiştireceğiniz açıklanmaktadır.

Google Cast ve Cast Connect nedir?

Google Cast, kullanıcıların mobil cihazdan TV'ye içerik yayınlamasına olanak tanır. Tipik bir Google Cast oturumu, gönderen ve alıcı uygulaması olmak üzere iki bileşenden oluşur. Mobil uygulama veya YouTube.com gibi bir web sitesi gibi gönderen uygulamalar, 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.

Bir Cast oturumundaki durumun neredeyse tamamı alıcı uygulamada saklanı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, Cast oturumunun mevcut durumunu içerir. Gönderen uygulamaları, oynatma bilgilerini kullanıcı arayüzünde görüntülemek için bu medya durumunu kullanır.

Bu altyapı üzerine kurulan Cast Connect ile Android TV uygulamanız alıcı işlevi görür. Cast Connect kitaplığı, Android TV uygulamanızın bir Cast alıcı uygulaması gibi mesaj almasına ve medya durumunu yayınlamasına olanak tanır.

Ne oluşturacağız?

Bu kod laboratuvarını tamamladığınızda, videoları Android TV uygulamasına yayınlamak için Cast gönderen uygulamalarını kullanabilirsiniz. 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 cihazı bağlama ve ATV uygulamasını başlatma.
  • Bir Cast gönderen uygulamasından 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ılar, birlikte verilen mobil gönderen uygulamasıyla Android TV uygulamasına video da yayınlayabilir.

Videonun tam ekran önizlemesinin yer aldığı bir dizi video küçük resminin (biri vurgulanmıştır) resmi; sağ üstte görünen "Cast Connect" kelimeleri

Geliştirici cihazlarını kaydetme

Uygulama geliştirme için Cast Connect özelliklerini etkinleştirmek istiyorsanız Android TV cihazının yerleşik Chromecast'inin seri numarasını Cast Developer Console'a kaydetmeniz gerekir. Seri numarasını, Android TV'nizde Ayarlar > Cihaz Tercihleri > Chromecast Entegre > 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 elde edilmesi gerektiğini unutmayın.

Android TV ekranında "Chromecast Entegre" ekranı, sürüm numarası ve seri numarası gösteriliyor

Cast Connect, kayıt olmadan güvenlik nedeniyle 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önderme işlemini test etmek için Video Yayınla adlı basit bir gönderen uygulamasını, kaynak kodu ZIP indirmesinde mobile-sender-0629.apk dosyası olarak yayınladık. APK'yı yüklemek için ADB'den yararlanacağız. Video Yayınla özelliğinin farklı bir sürümünü zaten yüklediyseniz devam etmeden önce lütfen cihazdaki tüm profillerden bu sürümün yüklemesini kaldırın.

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

mobile-sender.apk'yı yüklemek için adb install komutunu çalıştıran bir terminal penceresinin resmi

  1. Video Yayınla gönderen uygulamasını Android telefonunuzda bulabilirsiniz. Video yayınlama gönderen uygulama simgesi

Android telefon ekranında çalışan Yayın Videoları gönderen uygulamasının resmi

Android TV uygulamasını yükleme

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

  1. Hoş geldiniz ekranında Proje İçe Aktar'ı veya Dosya > Yeni > Proje İçe Aktar... menü seçeneklerini belirleyin.
  2. Örnek kod klasöründen klasör simgesiapp-done dizinini seçin ve Tamam'ı tıklayın.
  3. Dosya > Android App Studio'nun Projeyi Gradle ile Senkronize Et düğmesi Projeyi Gradle Dosyalarıyla Senkronize Et'i 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ı oluşturun. Cihaz, Android Studio'da gösterilir. Android Studio araç çubuğunda Android TV cihazını gösteren resim
  6. Android Studio Çalıştır düğmesi (sağa bakan yeşil üçgen)Çalıştır düğmesini tıklayın. Birkaç saniye sonra Cast Connect Codelab adlı ATV uygulaması görünür.

ATV uygulamasıyla Cast Connect'i oynayalım

  1. Android TV ana ekranına gidin.
  2. Android telefonunuzdan Video yayınlama 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. Cast Connect Codelab ATV uygulaması ATV'nizde başlatılır ve göndereninizdeki Yayın düğmesi, Ters çevrilmiş renklere sahip yayınlama düğmesi simgesi cihazına bağlandığını belirtir.
  4. ATV uygulamasından bir video seçtiğinizde video, ATV'nizde oynatılmaya başlar.
  5. Artık cep telefonunuzda, gönderen uygulamanızın alt kısmında bir mini kontrol cihazı gösteriliyor. Oynatma işlemini kontrol etmek için oynatma/duraklatma düğmesini kullanabilirsiniz.
  6. Cep telefonundan bir video seçin ve oynatın. Video, ATV'nizde oynatılmaya başlar ve genişletilmiş kumanda, mobil göndericinizde gösterilir.
  7. Telefonunuzu kilitleyin ve kilidini açtığınızda kilit ekranında medya oynatmayı kontrol etme veya yayınlamayı durdurma bildirimini görürsünüz.

Android telefon ekranında video oynatan bir mini oynatıcının yer aldığı bölümü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çin ve Tamam'ı tıklayın.
  3. Dosya > Android Studio'nun Gradle ile Senkronizasyon Projesi düğmesi Projeyi Gradle Dosyalarıyla Senkronize Et'i tıklayın.
  4. ATV cihazını seçin ve Android Studio'nun Çalıştır düğmesi, sağı gösteren yeşil bir üçgenÇalıştır düğmesini tıklayarak uygulamayı çalıştırın ve kullanıcı arayüzünü keşfedin. Seçilen Android TV cihazını gösteren Android Studio araç çubuğu

Videonun tam ekran önizlemesinin yer aldığı bir dizi video küçük resminin (biri vurgulanmıştır) resmi; sağ üstte görünen "Cast Connect" kelimeleri

Uygulama tasarımı

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

MainActivity

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

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

Bir öğe seçildiğinde, ilgili Movie nesnesi PlaybackActivity'a iletilir.

PlaybackActivity

Bu etkinlik, ExoPlayer içeren bir VideoView'yi barındıran bir Fragment (PlaybackVideoFragment), bazı medya kontrolleri ve seçili videonun açıklamasını gösteren ve kullanıcının videoyu Android TV'de oynatmasına olanak tanıyan bir metin alanı içerir. Kullanıcı, videoları oynatmak/duraklatmak veya oynatmayı ileri/geri sarmak için uzaktan kumandayı kullanabilir.

Cast Connect ön koşulları

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

Android TV uygulamanızda Cast Connect'in desteklenmesi için bir medya oturumundan etkinlikler oluşturmanız ve etkinlikleri desteklemeniz gerekir. Cast Connect kitaplığı, medya oturumunun durumuna göre medya durumunu oluşturur. Medya oturumunuz, Cast Connect kitaplığı tarafından bir gönderenden belirli mesajlar (ör. duraklatma) aldığında sinyal vermek için de kullanılır.

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

Bağımlılıklar

Uygulamanın build.gradle dosyasını, gerekli kitaplık bağımlılıklarını içerecek şekilde 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 derlendiğini doğrulamak için projeyi senkronize edin.

Başlatma

CastReceiverContext, tüm Cast etkileşimlerini koordine eden tek 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, AndroidManifest.xml uygulamasının <application> dosyasında 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önderen cihazınızdan ATV uygulamanızla bağlantı kurmak için başlatmak istediğiniz bir etkinliği seçin. Bu kod laboratuvarında, bir Cast oturumu başlatıldığında uygulamanın MainActivity etkinliğini başlatacağız. AndroidManifest.xml dosyasında, MainActivity bölümüne 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ı Bağlamı Yaşam Döngüsü

Uygulamanız başlatılırken CastReceiverContext'yi başlatmalı ve uygulamanız arka plana taşındığında CastReceiverContext'yi durdurmalısınız. CastReceiverContext.start() ve CastReceiverContext.stop() çağrılarını yönetmek için androidx.lifecycle kitaplığındaki LifecycleObserver sınıfını kullanmanızı öneririz.

MyApplication.kt dosyasını açın, uygulamanın onCreate yönteminde initInstance() öğesini çağırarak yayın bağlamını başlatın. AppLifeCycleObserver sınıfında start(), uygulama devam ettirildiğinde CastReceiverContext ve uygulama duraklatıldığında 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'u MediaManager'a bağlama

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

Bir MediaSession oluşturduğunuzda, komutların nereye gönderileceğini ve medya oynatma durumunu alacağını bilmesi için MediaManager ürününe geçerli MediaSession jetonunu da sağlamanız gerekir. PlaybackVideoFragment.kt dosyasında, jetonu MediaManager olarak ayarlamadan önce MediaSession değerinin 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 cihazınızı serbest bıraktığınızda MediaManager için boş 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, uygulamayı kapatmak ve ATV Ana Ekranına dönmek için Android Studio&#39;nun Çalıştır düğmesi, sağı gösteren yeşil bir üçgenÇalıştır düğmesini tıklayın. Gönderen cihazınızda 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ınla düğmesinin durumunun 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ına sahip bir intent aracılığıyla 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, load intent filtresini PlayerActivity'e 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 İsteklerinin İşlenmesini Yönetme

Etkinlik, yükleme isteği içeren bu intent'i alacak şekilde yapılandırıldığına göre bu isteği işleme almamız gerekiyor.

Uygulama, etkinlik başladığında processIntent adlı özel bir yöntemi çağırır. Bu yöntem, gelen amaçları işleme mantığını içerir. Bir yükleme isteğini işlemek için bu yöntemi değiştirir ve MediaManager örneğinin onNewIntent yöntemini çağırarak daha fazla işleme alınacak intent'i göndeririz. MediaManager, amacın bir yükleme isteği olduğunu algılarsa MediaLoadRequestData nesnesini amaçtan çıkarır ve MediaLoadCommandCallback.onLoad()'yi çağırır. PlaybackVideoFragment.kt dosyasında processIntent yöntemini, yükleme isteğini içeren intent'i işlemek için 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.
    ...
}

Daha sonra, MediaLoadCommandCallback soyut sınıfını genişleteceğiz. Bu, MediaManager tarafından çağrılan onLoad() yöntemini geçersiz kılar. Bu yöntem, yükleme isteğinin verilerini alır ve Movie nesnesine dönüştürür. Film, dönüştürüldükten sonra yerel oynatıcı tarafından oynatılır. Ardından MediaManager, MediaLoadRequest ile güncellenir ve MediaStatus'yi bağlı gönderenlere yayınlar. 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ığından, MediaManager öğesine kaydetmemiz gerekir. Geri arama işlevi, MediaManager.onNewIntent() çağrılmadan önce kaydedilmelidir. Oynatıcı başlatılırken 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ğı gösteren yeşil bir üçgenÇalıştır düğmesini tıklayın. Gönderenden, yayın 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 cihazınızda bir video seçtiğinizde video ATV'de oynatılmaya başlar. Telefonunuzda oynatma kontrollerine sahip olduğunuz bir bildirim alıp almadığınızı kontrol edin. Duraklat gibi kontrolleri kullanmayı deneyin. ATV cihazındaki video duraklatılmalıdır.

7. Yayınlama Kontrol Komutlarını Destekleme

Mevcut uygulama artık medya oturumuyla uyumlu temel komutları (ör. oynatma, duraklatma ve ilerleme) desteklemektedir. Ancak medya oturumunda kullanılamayan bazı Cast kontrol komutları vardır. Bu Cast kontrol komutlarını desteklemek için bir MediaCommandCallback kaydetmeniz gerekir.

Oynatıcı başlatılırken 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 yöntemleri geçersiz kılacak MyMediaCommandCallback sınıfı oluşturun:onQueueUpdate()

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 Durumu ile çalışma

Medya durumunu değiştirme

Cast Connect, medya oturumundan temel medya durumunu alır. Android TV uygulamanız, ileri seviye özellikleri desteklemek için MediaStatusModifier aracılığıyla ek durum özelliklerini belirtebilir ve geçersiz kılabilir. MediaStatusModifier, her zaman CastReceiverContext içinde 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 durdurma

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

Örneğin, mobil gönderenlere e-posta göndermeden önce MediaStatus bölümünde ö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 bir Android TV uygulamasının 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.