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 iki bileşenden oluşur: gönderen ve alıcı uygulaması. Mobil uygulama veya YouTube.com gibi web sitesi gibi gönderen uygulamaları, bir Yayın 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 (örneğin, 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ı, kullanıcı arayüzlerinde oynatma bilgilerini 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 yayın alıcı uygulamasıymış gibi mesajları almasına ve medya durumunu yayınlamasına olanak tanır.

Ne oluşturacağız?

Bu codelab'i tamamladığınızda Android TV uygulamasında video yayınlamak için Yayın gönderen uygulamaları kullanabilirsiniz. Android TV uygulaması, yayınlama 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 oynatma nasıl başlatılır?
  • Medya durumu, ATV uygulamasından Yayın gönderen uygulamalara nasıl gönderilir?

İhtiyacınız olanlar

2. Örnek kodu alın

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

ve indirilen zip dosyasının paketini açın.

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

Öncelikle tamamlanan ö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 ve daha sonra, seçildiğinde TV'de oynatılır. Kullanıcılar, eşlik eden mobil gönderen uygulamasını kullanarak Android TV uygulamasında video da yayınlayabilir.

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

Geliştirici cihazlarını kaydedin

Uygulama geliştirmede Cast Connect özelliklerini etkinleştirmek için kullanacağınız Android TV cihazının yerleşik Chromecast'inin seri numarasını Cast Developer Console'a kaydetmeniz gerekir. Seri numarasını Ayarlar > Cihaz Tercihleri > Chromecast Entegre > Android TV'nizin seri numarası. Bunun, fiziksel cihazınızın seri numarasından farklı olduğunu ve yukarıda açıklanan yöntemden elde edilmesi gerektiğini unutmayın.

"Chromecast Entegre" özelliğini gösteren bir Android TV ekranının resmi Sürüm numarası ve Seri numarası gibi

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ükleyin

Mobil cihazdan istek göndermeyi test etmek için Video Yayınla adlı basit bir gönderen uygulamasını, kaynak kodu zip indirme bölümünde mobile-sender-0629.apk dosyası olarak yayınladık. APK'yı yüklemek için ADB'den yararlanacağız. Video Yayınlama özelliğinin farklı bir sürümünü zaten yüklediyseniz devam etmeden önce lütfen cihazda bulunan 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 uygulamasını Android telefonunuza yükleyin.

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

  1. Video Yayınla gönderen uygulamasını Android telefonunuzda bulabilirsiniz. Cast Videoları 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. Karşılama ekranında Projeyi İçe Aktar'ı veya Dosya > Yeni > Projeyi İçe Aktar... menü seçenekleri.
  2. Örnek kod klasöründen klasör simgesiapp-done dizinini seçip Tamam'ı tıklayın.
  3. Dosya > Android App Studio'nun Gradle ile Senkronizasyon Projesi düğmesi Projeyi Gradle Dosyaları ile senkronize edin.
  4. Android TV cihazınızda geliştirici seçeneklerini ve USB üzerinden hata ayıklamayı etkinleştirin.
  5. Android TV cihazınıza ADB bağlandıktan sonra, cihaz Android Studio'da gösterilir. Android Studio araç çubuğunda Android TV cihazını gösteren resim
  6. Android Studio Run düğmesi, sağı gösteren yeşil bir üçgenÇalıştır düğmesini tıkladığınızda birkaç saniye sonra Cast Connect Codelab adlı ATV uygulaması gösterilir.

ATV uygulamasıyla Cast Connect'i oynatalım

  1. Android TV ana ekranına gidin.
  2. Android telefonunuzdan Cast Video 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. Mini kumandayı cep telefonunuzda artık gönderen uygulamanızın alt kısmında görebilirsiniz. Oynatmayı kontrol etmek için oynat/duraklat düğmesini kullanabilirsiniz.
  6. Cep telefonundan bir video seçin ve oynatın. Video ATV'nizde oynatılmaya başlar ve mobil gönderen cihazınızda genişletilmiş kumanda gösterilir.
  7. Telefonunuzu kilitler ve kilidini açtığınızda, kilit ekranında medya oynatmayı kontrol etmek veya yayınlamayı durdurmak için bir bildirim görürsünüz.

Android telefon ekranında video oynatan bir mini oynatıcının gösterildiği bölüm 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 için destek 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çenekleri.
  2. Örnek kod klasöründen klasör simgesiapp-start dizinini seçip Tamam'ı tıklayın.
  3. Dosya > Android Studio'nun Gradle ile Senkronizasyon Projesi düğmesi Projeyi Gradle Dosyaları ile senkronize edin.
  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çili Android TV cihazını gösteren Android Studio araç çubuğu

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

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 etkinlik bir Parça (MainFragment) içeriyor. Video listesi ve ilişkili meta verileri, MovieList sınıfında yapılandırılır ve Movie nesne listesini 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, başlık ve stüdyo ile video küçük resmini sunmak için bir CardPresenter öğesine bağlıdır ve ArrayObjectAdapter öğesine iletilir.

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

PlaybackActivity

Bu etkinlik, ExoPlayer içeren VideoView barındıran bir Parça (PlaybackVideoFragment) ve bazı medya denetimlerinin yanı sıra seçilen videonun açıklamasını gösteren ve kullanıcının videoyu Android TV'de oynatmasına olanak tanıyan bir metin alanı içeriyor. Kullanıcı, videoları oynatmak/duraklatmak veya oynatmak için uzaktan kumandayı kullanabilir.

Cast Connect'in ö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 durumu oluşturur. Medya oturumunuz, bir gönderenden duraklatma gibi belirli mesajlar aldığında sinyal almak için Cast Connect kitaplığı tarafından da kullanılır.

5. Cast 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'
}

Derlemeleri hatasız olarak onaylamak 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ını oluşturun ve projeye şu 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, uygulama AndroidManifest.xml dosyasının <application> etiketinde alıcı seçenekleri sağlayıcıyı 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 codelab'de, Cast oturumu başlatıldığında uygulamanın MainActivity öğesini kullanıma sunacağız. AndroidManifest.xml dosyasına, MainActivity içindeki başlatma amacı 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 kullanıma sunulduğunda CastReceiverContext öğesini başlatmalı ve uygulamanız arka plana taşındığında CastReceiverContext işlemini durdurmalısınız. CastReceiverContext.start() ve CastReceiverContext.stop() aramalarını yönetmek için androidx.lifecycle kitaplığındaki LifecycleObserver uygulaması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'ı MediaManager'a Bağlama

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

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 öğ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 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önderenden, yayın düğmesini Yayın düğmesi simgesi tıklayın ve ATV cihazınızı seçin. ATV cihazında ATV uygulamasının başlatıldığını ve yayın düğmesi 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 amacı 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 amacı 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 Yönetme

Etkinlik, yükleme isteği içeren bu niyeti alacak şekilde yapılandırıldığına göre artık etkinliği işlememiz gerekiyor.

Etkinlik başladığında uygulama, processIntent adlı gizli 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 niyeti daha fazla işlenmesi için göndeririz. MediaManager, niyetin yükleme isteği olduğunu tespit ederse amaçtan MediaLoadRequestData nesnesini ayıklar ve MediaLoadCommandCallback.onLoad() yöntemini çağırır. Yükleme isteğini içeren amacı işlemek için PlaybackVideoFragment.kt dosyasında 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.
    ...
}

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 bir Movie nesnesine dönüştürür. Film, dönüştürüldükten sonra yerel oynatıcı tarafından oynatılır. Bunun ardından MediaManager, MediaLoadRequest ile güncellenir ve MediaStatus öğesini bağlı gönderenlere yayınlar. PlaybackVideoFragment.kt dosyasında MyMediaLoadCommandCallback adında, iç içe yerleştirilmiş gizli bir 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 tanımlandığına göre artık MediaManager üzerinde kaydetmemiz gerekiyor. MediaManager.onNewIntent() çağrılmadan önce geri çağırmanın kaydedilmesi gerekir. 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ğı 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 cihazda bir video seçtiğinizde video ATV'de oynatılmaya başlar. Oynatma kontrollerinizin bulunduğu telefonunuzda bildirim alıp almadığınızı kontrol edin. Duraklat gibi kontrolleri kullanmayı deneyin. ATV cihazındaki video duraklatılmalıdır.

7. Yayın Kontrolü Komutlarını Destekleme

Mevcut uygulama artık oynatma, duraklatma ve sarma gibi medya oturumuyla uyumlu olan temel komutları destekliyor. Ancak medya oturumunda kullanılamayan bazı Yayınlama kontrolü komutları vardır. Bu yayın kontrolü komutlarını desteklemek için bir MediaCommandCallback kaydetmeniz gerekir.

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

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

Yöntemleri geçersiz kılmak için MyMediaCommandCallback sınıfı oluşturun (ör. Yayın kontrolü komutlarını desteklemek için 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, temel medya durumunu medya oturumundan alır. Android TV uygulamanız, ileri seviye özellikleri desteklemek için ek durum özelliklerini MediaStatusModifier ile belirtebilir ve geçersiz kılabilir. MediaStatusModifier her zaman CastReceiverContext içinde ayarladığınız MediaSession üzerinde çalışır.

Örneğin, onLoad geri çağırması tetiklendiğinde setMediaCommandSupported öğesini 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 ile Mücadele

Web alıcı SDK'sının MessageInterceptor özelliğine benzer şekilde, bağlı gönderenlere yayınlanmadan önce MediaStatus üzerinde ek değişiklikler yapmak için MediaManager öğenizde 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 Yayın için nasıl etkinleştirileceğini biliyorsunuz.

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