1. Genel bakış
Bu codelab'de, mevcut bir Android TV uygulamasını mevcut Yayın gönderen uygulamalarınızdan yayın ve iletişimi destekleyecek şekilde nasıl değiştireceğinizi öğreneceksiniz.
Google Cast ve Cast Connect nedir?
Google Cast, kullanıcıların bir 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ı, 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ı uygulamada depolanır. Durum güncellendiğinde (örneğin, yeni bir medya öğesi yüklendiyse) tüm gönderenlere bir medya durumu yayınlanır. Bu yayınlar, Yayınlama 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 Connect, Android TV uygulamanız alıcı görevi görür. Bu altyapı üzerine kurulur. Cast Connect kitaplığı, Android TV uygulamanızın sanki bir yayın alıcı uygulaması gibi mesajları ve medya durumunu almasını sağlar.
Neyi inşa edeceğiz?
Bu codelab'i tamamladığınızda Android TV uygulamasına video yayınlamak için Cast gönderen uygulamalarını kullanabilirsiniz. Android TV uygulaması ayrıca Cast protokolü aracılığıyla gönderen uygulamalarıyla iletişim kurabilir.
Neler öğreneceksiniz?
- Cast Connect kitaplığını örnek bir ATV uygulamasına ekleme.
- Yayın gönderen bir kullanıcıyı bağlama ve ATV uygulamasını başlatma.
- Yayın gönderen bir uygulama kullanarak ATV uygulamasında medya oynatma işlemini 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ç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ştirilmiş olduğu 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 düzeyde bilgi sahibi olma.
2. Örnek kodu alın
Örnek kodun tamamını bilgisayarınıza indirebilirsiniz...
indirilen zip dosyasını açın.
3. Örnek uygulamayı çalıştırma
Önce tamamlanmış örnek uygulamanın nasıl göründüğüne bakalım. Android TV uygulaması, Leanback kullanıcı arayüzünü ve temel video oynatıcıyı kullanır. Kullanıcı, listeden bir video seçebilir ve daha sonra seçildiğinde TV'de oynatılır. Cihazdaki mobil gönderen uygulaması sayesinde kullanıcılar, Android TV uygulamasında da video yayınlayabilir.
Geliştirici cihazlarını kaydetme
Uygulama geliştirmede Cast Connect özelliklerini etkinleştirmek için, kullanacağınız Android TV cihazının yerleşik Chromecast cihazının seri numarasını Cast Developer Console'da 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.
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ükleyin
Mobil cihazlardan gönderilen isteklerin test edilmesi için, kaynak kodu zip indirdiğini mobile-sender-0629.apk
dosyası olarak Cast Videos adlı 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 devam etmeden önce lütfen cihazdaki tüm profillerden bu sürümü 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ükleyin
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, Android TV cihazınıza bağlanırsa cihaz Android Studio'da gösterilir.
- Çalıştır düğmesini tıklayın. Birkaç saniye sonra Cast Connect Codelab adlı ATV uygulamasını görürsünüz.
ATV ile Cast Connect uygulamasını oynatalım
- Android TV ana ekranına gidin.
- Android telefonunuzdan Yayın 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ınla düğmesinde bağlantısı gösterilir.
- ATV uygulamasından bir video seçin. Video, ATV'nizde oynatılmaya başlar.
- Cep telefonunuzda, gönderen uygulamanızın alt kısmında artık bir mini kumanda görünür. Oynatmayı kontrol etmek için oynat/duraklat düğmesini kullanabilirsiniz.
- Cep telefonundan bir video seçip oynat. Video, ATV'nizde oynatılmaya başlar ve mobil göndereninizde genişletilmiş kumanda gösterilir.
- Telefonunuzu kilitlediğinizde, kilidini açtığınızda medya oynatmayı kontrol etmek veya yayınlamayı durdurmak için kilit ekranında bir bildirim görürsünüz.
4. Başlangıç projesini hazırlama
Tamamlanmış 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 temelini oluşturmaya 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'ı tıklayarak uygulamayı çalıştırın ve kullanıcı arayüzünü inceleyin.
Uygulama tasarımı
Uygulama, kullanıcının göz atabileceği bir video listesi sağlar. Kullanıcılar Android TV'de oynatmak üzere bir video seçebilir. Uygulama iki ana etkinlikten oluşuyor: 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
nesnelerinin listesini oluşturmak için setupMovies()
yöntemi çağrılır.
Movie
nesnesi; başlık, açıklama, küçük resimler 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 bir CardPresenter
öğesine bağlanır ve ArrayObjectAdapter
öğesine iletilir.
Bir öğe seçildiğinde, karşılık gelen Movie
nesnesi PlaybackActivity
öğesine iletilir.
PlaybackActivity
Bu etkinlik, ExoPlayer
içeren bir VideoView
, bazı medya denetimleri 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ı barındıran bir Parça (PlaybackVideoFragment
) içeriyor. Kullanıcı videoları oynatmak/duraklatmak veya oynatmak 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, AndroidX ad alanını kullanmak için ATV uygulamanızın güncellenmesini gerektirir.
Android TV uygulamanızda Cast Connect'i desteklemek için medya oturumundan etkinlik oluşturmanız ve 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 bunu belirtmek için Cast Connect kitaplığı tarafından da kullanılır.
5. Yayınlama Desteğini Yapılandırma
Bağımlılıklar
Uygulama 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'
}
Proje derlemelerinin hatasız olduğunu onaylamak için projeyi senkronize edin.
Başlatma
CastReceiverContext
, tüm Cast etkileşimlerini koordine eden bir tekil 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 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>
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önderen cihazdan ATV uygulamanızla bağlantı kurmak için başlatmak istediğiniz etkinliği seçin. Bu codelab'de, Cast oturumu başlatıldığında uygulamanın MainActivity
sürümünü kullanıma sunacağız. AndroidManifest.xml
dosyasında, MainActivity
bölümüne 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ısı Bağlamı Yaşam Döngüsü
Uygulamanız başlatıldığında CastReceiverContext
başlatmalı, uygulamanız arka plana taşındığında CastReceiverContext
durdurulmalıdır. CastReceiverContext.start()
ve CastReceiverContext.stop()
çağrıları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()
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 ile MediaManager arasında bağlantı kurma
MediaManager
, CastReceiverContext
teklisinin 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.
MediaSession
oluşturduğunuzda komutların nereye gönderileceğini ve medya oynatma durumunu alacağını bilebilmesi için geçerli MediaSession
jetonunu MediaManager
sağlayıcısına 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
kartınızı 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ızda dağıtmak için Çalıştır'ı tıklayın, uygulamayı kapatın ve ATV ana ekranına dönü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ınla düğmesinin 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 birlikte bir intent aracılığıyla gönderilir. Bu niyeti 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
Bu etkinlik, bir yükleme isteği içeren bu intent'i alacak şekilde yapılandırıldığına göre söz konusu etkinliği işlememiz gerekir.
Etkinlik başladığında uygulama, processIntent
adlı gizli bir yöntemi çağırır. Bu yöntem, gelen niyetlerin işlenmesine ilişkin 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ı daha fazla işlenmek üzere göndeririz. 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ğini içeren amacı 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, MediaManager
tarafından çağrılan onLoad()
yöntemini geçersiz kılacak MediaLoadCommandCallback
soyut sınıfının kapsamını genişleteceğiz. Bu yöntem, yükleme isteğinin verilerini alır ve Movie
nesnesine dönüştürür. Dönüştürüldükten sonra film, yerel oynatıcı tarafından oynatılır. 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ş bir gizli 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 geri çağırmayı MediaManager
'a kaydetmemiz gerekir. 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ınla 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çin. Video, ATV'de oynatılmaya başlar. Telefonunuzda, oynatma kontrollerinizin bulunduğu bir bildirim alıp almadığınızı kontrol edin. Duraklat gibi kontrolleri kullanmayı deneyin, ATV cihazında videonun duraklatılması gerekecek.
7. Yayın Kontrol Komutlarını Destekleme
Mevcut uygulama artık oynatma, duraklatma ve sarma gibi medya oturumlarıyla uyumlu temel komutları destekliyor. Ancak medya oturumunda kullanılamayan bazı Cast kontrol komutları vardır. Bu Cast kontrol komutlarını desteklemek için bir MediaCommandCallback
kaydı yapmanız gerekir.
Oynatıcı başlatılırken 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. onQueueUpdate()
) bu Yayın kontrolü komutlarını desteklemek için:
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. Gelişmiş özellikleri desteklemek için Android TV uygulamanız bir MediaStatusModifier
aracılığıyla ek durum özelliklerini belirleyip 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
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'a Müdahale Etme
Web alıcısı SDK'sının MessageInterceptor
'ine benzer şekilde, MediaStatus
cihazınızda ek değişiklikler yapmak için bağlı gönderenlere yayınlanmadan önce MediaManager
içinde bir MediaStatusWriter
belirtebilirsiniz.
Örneğin, mobil gönderenlere ileti 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ı Cast ile nasıl etkinleştireceğinizi biliyorsunuz.
Daha fazla ayrıntı için geliştirici kılavuzuna göz atın: /cast/docs/android_tv_receiver.