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 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
- En son Android SDK.
- 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 özellikli 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 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ı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.
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.
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.
- 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.
- 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:
- Karşılama ekranında Projeyi İçe Aktar'ı veya Dosya > Yeni > Projeyi İçe Aktar... menü seçenekleri.
- Örnek kod klasöründen
app-done
dizinini seçip Tamam'ı tıklayın. - Dosya > Projeyi Gradle Dosyaları ile senkronize edin.
- Android TV cihazınızda geliştirici seçeneklerini ve USB üzerinden hata ayıklamayı etkinleştirin.
- Android TV cihazınıza ADB bağlandıktan sonra, cihaz Android Studio'da gösterilir.
- Ç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
- 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.
- 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.
- 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.
- 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.
- 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.
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:
- Karşılama ekranında Projeyi İçe Aktar'ı veya Dosya > Yeni > Projeyi İçe Aktar... menü seçenekleri.
- Örnek kod klasöründen
app-start
dizinini seçip Tamam'ı tıklayın. - Dosya > Projeyi Gradle Dosyaları ile senkronize edin.
- 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 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 Ç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 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 Ç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 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.