1. Genel Bakış

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
- En yeni Android SDK.
- En son Android Studio sürümü. Özellikle
Chipmunk | 2021.2.1veya sonraki sürümler. - Geliştirici seçenekleri ve USB üzerinden hata ayıklama'nın etkinleştirildiği bir Android TV cihaz.
- Geliştirici seçenekleri ve USB üzerinden hata ayıklama'nın etkinleştirildiği bir Android telefon.
- Android telefonunuzu ve Android TV cihazlarınızı geliştirme bilgisayarınıza bağlamak için USB veri kablosu.
- Kotlin kullanarak Android uygulamaları geliştirme konusunda temel bilgi sahibi olmanız gerekir.
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.

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.

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.
- Android telefonunuzda geliştirici seçeneklerini ve USB üzerinden hata ayıklamayı etkinleştirin.
- Android telefonunuzu geliştirme yaptığınız bilgisayara bağlamak için USB veri kablosu takın.
mobile-sender-0629.apkuygulamasını Android telefonunuza yükleyin.

- Videoları Yayınla gönderen uygulamasını Android telefonunuzda bulabilirsiniz.


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:
- Karşılama ekranında Projeyi İçe Aktar'ı veya Dosya > Yeni > Projeyi İçe Aktar... menü seçeneklerini belirleyin.
- Örnek kod klasöründen

app-donedizinini seçip Tamam'ı tıklayın. - File >
Sync Project with Gradle Files'ı (Dosya >
Projeyi Gradle Dosyalarıyla Senkronize Et) tıklayın. - Android TV cihazınızda geliştirici seçeneklerini ve USB üzerinden hata ayıklamayı etkinleştirin.
- Android TV cihazınızla ADB bağlantısı kurun. Cihaz, Android Studio'da gösterilmelidir.

Run (Ç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
- Android TV ana ekranına gidin.
- Android telefonunuzda Cast Videos gönderen uygulamasını açın. Yayınla düğmesini
tıklayın ve ATV cihazınızı seçin. - 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
. - ATV uygulamasından bir video seçtiğinizde video, ATV'nizde oynatılmaya başlar.
- 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.
- 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.
- 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.

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:
- Karşılama ekranında Projeyi İçe Aktar'ı veya Dosya > Yeni > Projeyi İçe Aktar... menü seçeneklerini belirleyin.
- Örnek kod klasöründen

app-startdizinini seçip Tamam'ı tıklayın. - File >
Sync Project with Gradle Files'ı (Dosya >
Projeyi Gradle Dosyalarıyla Senkronize Et) tıklayın. - ATV cihazını seçin ve uygulamayı çalıştırıp kullanıcı arayüzünü keşfetmek için
Çalıştır düğmesini tıklayın. 

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
Ç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
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
Çalıştır düğmesini tıklayın. Göndereninizden Yayınla düğmesini
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.