1. Genel bakış
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
- En son Android SDK.
- En son Android Studio. Özellikle
Chipmunk | 2021.2.1
veya sonraki sürümler. - Geliştirici seçeneklerini ve USB üzerinden hata ayıklamayı etkinleştirmiş bir Android TV cihazı.
- Geliştirici seçeneklerini ve USB üzerinden hata ayıklamayı etkinleştirmiş bir Android telefon.
- Android telefonunuzu ve Android TV cihazlarınızı geliştirme bilgisayarınıza bağlamak için bir USB veri kablosu.
- Kotlin kullanarak Android uygulamaları geliştirme konusunda temel bilgi sahibi olma.
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.
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.
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.
- 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
uygulamasını Android telefonunuza yükleyin.
- Yayın Videoları 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:
- Karşılama ekranında Projeyi İçe Aktar veya Dosya > Yeni > Projeyi İç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.
- ADB'yi Android TV cihazınızla bağlarsanız cihaz Android Studio'da gösterilir.
Ç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
- Android TV ana ekranına gidin.
- Android telefonunuzdan Cast Video 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. Göndereninizdeki Yayınla düğmesi ise
bağlı olduğunu gösterir.
- ATV uygulamasından bir video seçtiğinizde video ATV'nizde oynatılmaya başlar.
- 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.
- Cep telefonundan bir video seçip oynatın. Video ATV'nizde oynatılmaya başlar ve genişletilmiş kumanda mobil göndereninizde gösterilir.
- 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.
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:
- 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 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 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 Çalıştır düğmesini tıklayın. Gönderenden Yayınla düğmesini
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 Çalıştır düğmesini tıklayın. Gönderenden Yayınla düğmesini
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.