Android TV uygulamasını yayınlama özelliğini etkinleştirme

1. Genel bakış

Google Cast logosu

Bu codelab'de, mevcut Cast gönderen uygulamalarınızdan yayın ve iletişim yapılmasını desteklemek için mevcut bir Android TV uygulamasını nasıl değiştireceğiniz açıklanmaktadır.

Google Cast ve Cast Connect nedir?

Google Cast, kullanıcıların mobil cihazlardan TV'ye içerik yayınlamasına olanak tanır. Tipik bir Google Cast oturumu iki bileşenden oluşur: bir gönderen ve alıcı uygulaması. Mobil uygulama veya YouTube.com gibi bir web sitesi gibi gönderen uygulamaları, bir Cast alıcı uygulamasının oynatılmasını başlatır ve kontrol eder. Yayın alıcı uygulamaları Chromecast ve Android TV cihazlarında çalışan HTML 5 uygulamalarıdır.

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

Cast TV, bu altyapının üzerine inşa edilir ve Android TV uygulamanız alıcı olarak çalışır. Cast Connect kitaplığı, Android TV uygulamanızın mesajları almasına ve medya durumunu yayın cihazı uygulamasıymış gibi yayınlamasına olanak tanır.

Ne tür bir kampanya 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ı ayrıca Yayın protokolü üzerinden gönderen uygulamalarla iletişim kurabilir.

Neler öğreneceksiniz?

  • Cast Connect kitaplığını örnek bir ATV uygulamasına ekleme.
  • Yayın göndereni bağlama ve ATV uygulamasını başlatma.
  • Yayın gönderen bir uygulamadan ATV uygulamasında medya oynatmayı başlatma.
  • Medya durumunu ATV uygulamasından Yayın gönderen uygulamalara gönderme.

Gerekenler

2. Örnek kodu alın

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

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

3. Örnek uygulamayı çalıştırın

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

Bir videonun tam ekran önizlemesinin yer aldığı bir dizi video küçük resmi (öne çıkanlar) resmi; sağ üstte görünen "Yayın Bağlantısı" kelimeleri

Geliştirici cihazlarını kaydetme

Uygulama geliştirmede Cast Connect özelliklerini etkinleştirmek için Yayın Geliştirici Konsolu'nda kullanacağınız Android TV cihazının yerleşik Chromecast'inin seri numarasını kaydetmeniz gerekir. Seri numarasını, Android TV'nizde Ayarlar > Cihaz Tercihleri > Chromecast Entegre > Seri numarası'na giderek bulabilirsiniz. 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" ekranını, Sürüm numarasını ve Seri numarasını gösteren bir Android TV ekranı

Kayıt işlemi olmadan Cast Connect, 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

Bir mobil cihazdan gönderme isteklerini test etmek için, kaynak kodu zip indirme işleminde mobile-sender-0629.apk dosyası olarak Yayın Videosu adında basit bir gönderen uygulaması sağladık. APK'yı yüklemek için ADB'den yararlanacağız. Yayın Videolarının farklı bir sürümünü zaten yüklediyseniz lütfen devam etmeden önce bu sürümü cihazda bulunan 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 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 bir terminal penceresinin resmi

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

Android telefon ekranında çalışan Cast Video 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ç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 Gradle ile proje senkronizasyonu 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. ADB'yi Android TV cihazınızla bağlarsanız cihaz Android Studio'da gösterilir. Android Studio cihazın Android Studio araç çubuğunda görünen resmi
  6. Android Studio Çalıştır düğmesi, sağı gösteren yeşil bir üçgenÇalıştır düğmesini tıklayın. Cast Connect Codelab adlı ATV uygulamasının birkaç saniye sonra göründüğünü göreceksiniz.

Cast Connect'i ATV uygulamasıyla oynayalım

  1. Android TV ana ekranına gidin.
  2. Android telefonunuzdan Cast Video gönderen uygulamasını açın. Yayınla düğmesini Yayınla 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. Göndereninizdeki Yayınla düğmesi ise Ters çevrilmiş renkleri olan Yayınla düğmesi simgesi bağlı olduğunu gösterir.
  4. ATV uygulamasından bir video seçtiğinizde video ATV'nizde oynatılmaya başlar.
  5. Cep telefonunuzda, gönderen uygulamanızın alt kısmında bir mini kumanda görünür. Oynatmayı duraklatmak 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 mobil göndereninizde gösterilir.
  7. Telefonunuzu kilitlediğinizde, 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 oynatıcı 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 desteğini eklememiz gerekir. Artık Android Studio'yu kullanarak başlangıç projesinin üzerine inşa etmeye 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 Projeyi Senkronize Et düğmesi Projeyi Gradle Dosyalarıyla Senkronize Et'i 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ğı gösteren yeşil bir üç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 yer aldığı bir dizi video küçük resmi (öne çıkanlar) resmi; sağ üstte görünen "Yayın Bağlantısı" kelimeleri

Uygulama tasarımı

Uygulama, kullanıcının göz atabileceği videoların listesini sağlar. Kullanıcılar Android TV'de oynatmak için 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 bunlarla ilişkilendirilen meta veriler MovieList sınıfında yapılandırılır ve Movie nesnelerinin listesini oluşturmak için setupMovies() yöntemi çağrılır.

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

Bir öğe seçildiğinde PlaybackActivity öğesi, ilgili Movie nesnesine iletilir.

Oynatma Etkinliği

Bu etkinlik, ExoPlayer ile VideoView barındıran bazı medya parçaları (PlaybackVideoFragment), bazı medya denetimleri ve seçilen videonun açıklamasını gösteren bir metin alanı içeriyor. Bu alana kullanıcının videoyu Android TV'de oynatmasını sağlıyor. 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'i desteklemek için bir medya oturumundan etkinlik oluşturmanız ve desteklemeniz gerekir. Cast Connect kitaplığı, medya oturumunun durumuna göre medya durumu oluşturur. Ayrıca, medya oturumunuz Cast Connect kitaplığı tarafından, bir gönderenden gelen duraklatma gibi belirli mesajları aldığında sinyal vermek için kullanılır.

5. Yayın 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 hata olmadan oluşturulduğundan emin olmak için projeyi senkronize edin.

Başlatma

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

CastReceiverOptionsProvider.kt dosyası oluşturun ve aşağıdaki sınıfı projeye 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> etiketindeki 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ıza bağlanmak için başlatmak istediğiniz bir etkinliği seçin. Bu codelab'de bir Cast oturumu başlatıldığında uygulamanın MainActivity uygulamasını kullanıma sunacağız. AndroidManifest.xml dosyasına, başlatma amacı filtresini MainActivity 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 uygulamasını başlatmalı ve uygulamanız arka plana taşındığında CastReceiverContext uygulamasını durdurmalısınız. CastReceiverContext.start() ve CastReceiverContext.stop() özelliklerini aramayı yönetmek için androidx.lifecycle kitaplığındaki LifecycleObserver etiketini kullanmanızı öneririz.

MyApplication.kt dosyasını açın, uygulamanın onCreate yönteminde initInstance() yöntemini ç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 teklisinin mülküdür; medya durumunu yönetir, yükleme amacını yönetir, 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ın nereye gönderileceğini ve medya oynatma durumunu nereden alacağını bilmesi için MediaManager öğesine geçerli MediaSession jetonunu da sağlamanız gerekir. PlaybackVideoFragment.kt dosyasında, jetonu MediaManager olarak ayarlamadan önce MediaSession işleminin 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 videonuzu yayınlarken MediaManager uygulamasında 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ızda 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ınla düğmesini Yayınla 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ğlandığını görürsünüz.

6. Medya Yükleniyor

Yükleme komutu, geliştirici konsolunda tanımladığınız paket adıyla 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ış amaç 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 İşleme

Etkinlik, bu isteği alıp yükleme isteği alacak şekilde yapılandırıldığına göre bunu işlememiz gerekir.

Uygulama, etkinlik başladığında processIntent adlı özel bir yöntemi çağırır. Bu yöntem, gelen niyetlerin işlenmesiyle ilgili mantığı 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 amacın daha fazla işlenmesini isteriz. MediaManager, amacın bir yükleme isteği olduğunu algılarsa amaçtan MediaLoadRequestData nesnesini ayıklar ve MediaLoadCommandCallback.onLoad() yöntemini çağırır. Yükleme isteğinde bulunan niyeti işlemek 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 MediaLoadCommandCallback soyut sınıfını genişleteceğiz. Bu sıralama, MediaManager tarafından çağrılan onLoad() yöntemini geçersiz kılacak. Bu yöntem, yükleme isteğinin verilerini alır ve bir Movie nesnesine dönüştürür. Dönüştürülen film, yerel oynatıcı tarafından oynatılır. MediaManager daha sonra MediaLoadRequest ile güncellenir ve MediaStatus adlı dosyayı 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 tanımlandığına göre artık MediaManager özelliğine kaydedilmesi gerekiyor. MediaManager.onNewIntent() aranabilmesi için 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ınla düğmesini Yayınla düğmesi simgesi tıklayın ve ATV cihazınızı seçin. ATV uygulaması, ATV cihazında başlatılır. Mobil cihazlarda bir video seçtiğinizde video ATV'de oynatılmaya başlar. Telefonunuzda oynatma kontrollerinin olduğu bir bildirim alıp almadığınızı kontrol edin. Duraklatma gibi kontrolleri kullanmayı deneyin. ATV cihazındaki video duraklatılmalıdır.

7. Yayın Denetimi Komutlarını Destekleme

Mevcut uygulama artık medya oturumuyla uyumlu oynatma, duraklatma ve sarmalama gibi temel komutları destekliyor. Ancak medya oturumunda kullanılamayan bazı Yayınlama denetimi komutları vardır. Bu Cast denetim 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 bu Cast kontrol komutlarını desteklemek üzere onQueueUpdate() gibi MyMediaCommandCallback sınıfı oluşturun:

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, gelişmiş özellikleri desteklemek için bir MediaStatusModifier aracılığıyla ek durum özelliklerini belirtebilir ve geçersiz kılabilir. MediaStatusModifier her zaman CastReceiverContext içinde ayarladığınız MediaSession ile ç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 Medya Durumuna Müdahale

Web alıcı SDK'sına ait MessageInterceptor özelliğine benzer şekilde, MediaStatus bölümünde bağlı gönderenlere yayınlanmadan önce ek değişiklikler yapmak için MediaManager içinde bir MediaStatusWriter belirtebilirsiniz.

Örneğin, mobil gönderenlere göndermeden önce MediaStatus içindeki özel verileri 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ı nasıl etkinleştireceğinizi biliyorsunuz.

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