1. Genel Bakış
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
- En son Android SDK'sı.
- Android Studio'nun en son sürümü. Özellikle
Chipmunk | 2021.2.1
veya 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'i kullanarak Android uygulaması geliştirmeyle ilgili temel bilgilere sahip olma.
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.
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.
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.
- Android telefonunuzda geliştirici seçeneklerini ve USB üzerinden hata ayıklamayı etkinleştirin.
- Android telefonunuzu geliştirme bilgisayarınıza bağlamak için USB veri kablosu takın.
mobile-sender-0629.apk
'ü Android telefonunuza yükleyin.
- Video Yayınla gönderen uygulamasını Android telefonunuzda bulabilirsiniz.
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:
- Hoş geldiniz ekranında Proje İçe Aktar'ı veya Dosya > Yeni > Proje İçe Aktar... menü seçeneklerini belirleyin.
- Örnek kod klasöründen
app-done
dizinini seçin ve Tamam'ı tıklayın. - Dosya > Projeyi Gradle Dosyalarıyla Senkronize Et'i 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ı oluşturun. Cihaz, Android Studio'da gösterilir.
- Ç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
- Android TV ana ekranına gidin.
- Android telefonunuzdan Video yayınlama gönderen uygulamasını açın. Yayınla düğmesini tıklayın ve ATV cihazınızı seçin.
- Cast Connect Codelab ATV uygulaması ATV'nizde başlatılır ve göndereninizdeki Yayın düğmesi, cihazına bağlandığını belirtir.
- ATV uygulamasından bir video seçtiğinizde video, ATV'nizde oynatılmaya başlar.
- 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.
- 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.
- 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.
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-start
dizinini seçin ve Tamam'ı tıklayın. - Dosya > Projeyi Gradle Dosyalarıyla Senkronize Et'i tıklayın.
- ATV cihazını seçin ve Çalıştır düğmesini tıklayarak uygulamayı çalıştırın ve kullanıcı arayüzünü keşfedin.
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 Çalıştır düğmesini tıklayın. Gönderen cihazınızda 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ı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 Çalıştır düğmesini tıklayın. Gönderenden, yayın düğmesini 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.