1. Überblick
In diesem Codelab erfährst du, wie du eine bestehende Android TV-App so modifizierst, dass sie das Streamen und die Kommunikation von deinen bestehenden Apps für Cast-Sender unterstützt.
Was sind Google Cast und Cast Connect?
Mit Google Cast können Nutzer Inhalte von einem Mobilgerät auf einen Fernseher streamen. Eine typische Google Cast-Sitzung besteht aus zwei Komponenten: einer Absender-App und einer Empfänger-App. Sender-Apps, wie mobile Apps oder Websites wie YouTube.com, initiieren und steuern die Wiedergabe einer Cast-Receiver-App. Cast-Receiver-Apps sind HTML 5-Apps, die auf Chromecast- und Android TV-Geräten ausgeführt werden.
Fast der gesamte Status einer Übertragungssitzung wird in der App des Empfängers gespeichert. Wenn der Status aktualisiert wird, z. B. beim Laden eines neuen Medienelements, wird ein Medienstatus an alle Absender gesendet. Diese Übertragungen enthalten den aktuellen Status der Streamingsitzung. Senderanwendungen verwenden diesen Medienstatus, um Wiedergabeinformationen auf ihrer Benutzeroberfläche anzuzeigen.
Cast Connect basiert auf dieser Infrastruktur, wobei Ihre Android TV App als Empfänger fungiert. Mithilfe der Cast Connect-Bibliothek kann Ihre Android TV App Nachrichten empfangen und den Medienstatus übertragen, als wäre sie eine Streamingempfänger-App.
Ziele
Wenn du dieses Codelab abgeschlossen hast, kannst du die Cast-Sender-Apps verwenden, um Videos in eine Android TV-App zu streamen. Die Android TV App kann auch über das Cast-Protokoll mit Absender-Apps kommunizieren.
Lerninhalte
- So fügen Sie die Cast Connect-Mediathek einer ATV-Beispiel-App hinzu
- So verbinden Sie einen Cast-Sender und starten die ATV App.
- Initiieren der Medienwiedergabe in der ATV App über eine Cast-Sender-App
- Medienstatus von der ATV App an Streaming-Sender-Apps senden
Voraussetzungen
- Das neueste Android SDK
- Die neueste Version von Android Studio. Insbesondere
Chipmunk | 2021.2.1
oder neuere Versionen. - Ein Android TV-Gerät, auf dem Entwickleroptionen und USB-Debugging aktiviert sind
- Ein Android-Smartphone, auf dem Entwickleroptionen und USB-Debugging aktiviert sind.
- Ein USB-Datenkabel, um Ihr Android-Smartphone und Android TV-Geräte mit Ihrem Entwicklungscomputer zu verbinden.
- Grundkenntnisse in der Entwicklung von Android-Apps mit Kotlin
2. Beispielcode abrufen
Sie können den gesamten Beispielcode auf Ihren Computer herunterladen...
und entpacken Sie die heruntergeladene ZIP-Datei.
3. Beispiel-App ausführen
Sehen wir uns zuerst an, wie die fertige Beispiel-App aussieht. Die Android TV-App verwendet die Leanback-Benutzeroberfläche und einen einfachen Videoplayer. Der Nutzer kann ein Video aus einer Liste auswählen und anschließend auf dem Fernseher wiedergeben. Mit der zugehörigen mobilen Sender-App können Nutzer auch ein Video in die Android TV App streamen.
Entwicklergeräte registrieren
Um Cast Connect-Funktionen für die App-Entwicklung zu aktivieren, müssen Sie die Seriennummer des integrierten Chromecast des Android TV-Geräts, den Sie verwenden, in der Cast-Entwicklerkonsole registrieren. Die Seriennummer finden Sie auf Ihrem Android TV unter Einstellungen > Geräteeinstellungen > Integrierte Chromecast-Technologie > Seriennummer. Diese unterscheidet sich von der Seriennummer Ihres physischen Geräts und muss über die oben beschriebene Methode abgerufen werden.
Ohne Registrierung funktioniert Cast Connect aus Sicherheitsgründen nur für Apps, die über den Google Play Store installiert wurden. Starten Sie Ihr Gerät 15 Minuten nach Beginn des Registrierungsvorgangs neu.
Android-Sender-App installieren
Um das Senden von Anfragen von einem Mobilgerät aus zu testen, stellen wir eine einfache Senderanwendung namens "Videos streamen" als mobile-sender-0629.apk
-Datei in der ZIP-Datei mit dem Quellcode bereit. Wir werden ADB nutzen, um das APK zu installieren. Wenn Sie bereits eine andere Version von "Videos streamen" installiert haben, deinstallieren Sie diese Version von allen Profilen auf dem Gerät, bevor Sie fortfahren.
- Aktivieren Sie Entwickleroptionen und USB-Debugging auf Ihrem Android-Smartphone.
- Schließen Sie ein USB-Datenkabel an, um Ihr Android-Smartphone mit dem Entwicklungscomputer zu verbinden.
- Installiere
mobile-sender-0629.apk
auf deinem Android-Smartphone.
- Sie finden die Absender-App Videos streamen auf Ihrem Android-Smartphone.
Android TV App installieren
In der folgenden Anleitung wird beschrieben, wie Sie die fertige Beispiel-App in Android Studio öffnen und ausführen:
- Wählen Sie auf der Willkommensseite Projekt importieren oder in den Menüoptionen Datei > Neu > Projekt importieren... aus.
- Wählen Sie im Ordner mit dem Beispielcode das Verzeichnis
app-done
aus und klicken Sie auf „OK“. - Klicken Sie auf Datei > Projekt mit Gradle-Dateien synchronisieren.
- Aktivieren Sie Entwickleroptionen und USB-Debugging auf Ihrem Android TV-Gerät.
- ADB mit deinem Android TV-Gerät verbinden – das Gerät sollte in Android Studio angezeigt werden.
- Klicken Sie auf die Schaltfläche Ausführen. Nach einigen Sekunden sollte die ATV-App Cast Connect Codelab erscheinen.
Cast Connect mit der ATV App abspielen
- Rufen Sie den Android TV-Startbildschirm auf.
- Öffnen Sie die App zum Senden von Videos auf Ihrem Android-Smartphone. Klicke auf das Cast-Symbol und wähle dein Quad-Gerät aus.
- Die Cast Connect Codelab ATV App wird auf Ihrem ATV gestartet und das Cast-Symbol auf Ihrem Sender zeigt an, dass sie verbunden ist .
- Wählen Sie in der ATV App ein Video aus. Es wird auf Ihrem ATV abgespielt.
- Auf deinem Smartphone ist jetzt unten in der Sender-App ein Mini-Controller sichtbar. Du kannst die Wiedergabe mit der Wiedergabe-/Pausetaste steuern.
- Wähle ein Video auf dem Smartphone aus und starte die Wiedergabe. Das Video wird auf dem Quad-Lautsprecher abgespielt und der erweiterte Controller wird auf dem mobilen Sender angezeigt.
- Wenn Sie Ihr Smartphone sperren, sollten Sie auf dem Sperrbildschirm eine Benachrichtigung sehen, über die Sie die Medienwiedergabe steuern oder das Streaming beenden können.
4. Startprojekt vorbereiten
Nachdem wir nun die Cast Connect-Integration der App abgeschlossen haben, müssen wir die heruntergeladene Start-App für Cast Connect unterstützen. Jetzt können Sie mit Android Studio auf dem Startprojekt aufbauen:
- Wählen Sie auf der Willkommensseite Projekt importieren oder in den Menüoptionen Datei > Neu > Projekt importieren... aus.
- Wählen Sie im Ordner mit dem Beispielcode das Verzeichnis
app-start
aus und klicken Sie auf „OK“. - Klicken Sie auf Datei > Projekt mit Gradle-Dateien synchronisieren.
- Wählen Sie „ATV-Gerät“ aus und klicken Sie auf die Schaltfläche Ausführen, um die App auszuführen und sich die Benutzeroberfläche anzusehen.
App-Design
Die App stellt eine Liste mit Videos bereit, die der Nutzer durchsuchen kann. Nutzer können ein Video zur Wiedergabe auf Android TV auswählen. Die App besteht aus zwei Hauptaktivitäten: MainActivity
und PlaybackActivity
.
MainActivity
Diese Aktivität enthält ein Fragment (MainFragment
). Die Liste der Videos und die zugehörigen Metadaten werden in der Klasse MovieList
konfiguriert und die Methode setupMovies()
wird aufgerufen, um eine Liste von Movie
-Objekten zu erstellen.
Ein Movie
-Objekt repräsentiert ein Videoelement mit Titel, Beschreibung, Miniaturansichten des Bildes und Video-URL. Jedes Movie
-Objekt ist an ein CardPresenter
-Objekt gebunden, um das Video-Thumbnail mit Titel und Studio zu präsentieren und an ArrayObjectAdapter
zu übergeben.
Wenn ein Element ausgewählt wird, wird das entsprechende Movie
-Objekt an PlaybackActivity
übergeben.
PlaybackActivity
Diese Aktivität enthält ein Fragment (PlaybackVideoFragment
), das ein VideoView
mit ExoPlayer
, einigen Mediensteuerelementen und einem Textbereich für die Beschreibung des ausgewählten Videos hostet. Hier kann der Nutzer das Video auf Android TV abspielen. Der Nutzer kann die Fernbedienung verwenden, um Videos abzuspielen/zu pausieren oder zu suchen.
Voraussetzungen für Cast Connect
Für Cast Connect werden neue Versionen der Google Play-Dienste verwendet, für die Ihre ATV App auf den AndroidX-Namespace aktualisiert wurde.
Damit Cast Connect in Ihrer Android TV App unterstützt werden kann, müssen Sie Ereignisse aus einer Mediensitzung erstellen und unterstützen. Die Cast Connect-Bibliothek generiert den Medienstatus anhand des Status der Mediensitzung. Ihre Mediensitzung wird auch von der Cast Connect-Bibliothek verwendet, um zu signalisieren, wenn bestimmte Nachrichten von einem Absender eingegangen sind, z. B. eine Pause.
5. Cast-Unterstützung konfigurieren
Abhängigkeiten
Aktualisieren Sie die Datei build.gradle
der Anwendung, um die erforderlichen Bibliotheksabhängigkeiten hinzuzufügen:
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'
}
Synchronisieren Sie das Projekt, um zu prüfen, ob das Projekt fehlerfrei erstellt wird.
Initialisierung
CastReceiverContext
ist ein Singleton-Objekt zur Koordinierung aller Cast-Interaktionen. Sie müssen die Schnittstelle ReceiverOptionsProvider
implementieren, um CastReceiverOptions
bereitzustellen, wenn CastReceiverContext
initialisiert wird.
Erstellen Sie die Datei CastReceiverOptionsProvider.kt
und fügen Sie dem Projekt die folgende Klasse hinzu:
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()
}
}
Geben Sie dann den Anbieter für Empfängeroptionen im Tag <application>
der Datei AndroidManifest.xml
der App an:
<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>
Wenn du vom Cast-Sender eine Verbindung zu deiner ATV App herstellen möchtest, wähle die Aktivität aus, die du starten möchtest. In diesem Codelab starten wir MainActivity
der App, wenn eine Streaming-Sitzung gestartet wird. Fügen Sie in der Datei AndroidManifest.xml
im MainActivity
den Start-Intent-Filter hinzu.
<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>
Kontextlebenszyklus des Streamingempfängers
Du solltest CastReceiverContext
starten, wenn deine App gestartet wird, und CastReceiverContext
beenden, wenn die App in den Hintergrund verschoben wird. Wir empfehlen, LifecycleObserver
aus der androidx.lifecycle-Bibliothek zu verwenden, um die Aufrufe von CastReceiverContext.start()
und CastReceiverContext.stop()
zu verwalten
Öffnen Sie die Datei MyApplication.kt
und initialisieren Sie den Cast-Kontext, indem Sie initInstance()
in der onCreate
-Methode der Anwendung aufrufen. In der AppLifeCycleObserver
-Klasse start()
die CastReceiverContext
, wenn die Anwendung fortgesetzt wird, und stop()
sie, wenn sie pausiert wird:
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 mit MediaManager verbinden
MediaManager
ist eine Property des Singleton-Elements CastReceiverContext
. Sie verwaltet den Medienstatus, verarbeitet den Lade-Intent, wandelt die Medien-Namespace-Nachrichten von den Absendern in Medienbefehle um und sendet den Medienstatus an die Absender zurück.
Wenn Sie ein MediaSession
erstellen, müssen Sie auch das aktuelle MediaSession
-Token an MediaManager
übergeben, damit es weiß, wohin die Befehle gesendet und der Status der Medienwiedergabe abgerufen werden soll. Achten Sie in der Datei PlaybackVideoFragment.kt
darauf, dass MediaSession
initialisiert wird, bevor Sie das Token auf MediaManager
setzen.
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())
}
}
}
}
Wenn du MediaSession
aufgrund einer inaktiven Wiedergabe freigibst, solltest du für MediaManager
ein Null-Token festlegen:
private fun releasePlayer() {
mMediaSession?.release()
castReceiverContext?.mediaManager?.setSessionCompatToken(null)
...
}
Beispiel-App ausführen
Klicken Sie auf die Schaltfläche Ausführen, um die App auf Ihrem ATV-Gerät bereitzustellen, schließen Sie sie und kehren Sie zum ATV-Startbildschirm zurück. Klicken Sie bei Ihrem Sender auf das Cast-Symbol und wählen Sie Ihr Quad-Gerät aus. Die ATV App wird auf dem Quad-Gerät gestartet und die Übertragungsschaltfläche ist verbunden.
6. Medien werden geladen
Der Ladebefehl wird über einen Intent mit dem Paketnamen gesendet, den Sie in der Entwicklerkonsole definiert haben. Fügen Sie Ihrer Android TV-App den folgenden vordefinierten Intent-Filter hinzu, um die Zielaktivität anzugeben, die diesen Intent erhalten soll. Fügen Sie in der Datei AndroidManifest.xml
den Lade-Intent-Filter zu PlayerActivity
hinzu:
<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>
Ladeanfragen auf Android TV verarbeiten
Nachdem die Aktivität so konfiguriert ist, dass sie diesen Intent mit einer Ladeanfrage empfängt, müssen wir sie verarbeiten.
Die App ruft eine private Methode namens processIntent
auf, wenn die Aktivität beginnt. Diese Methode enthält die Logik für die Verarbeitung eingehender Intents. Zum Verarbeiten einer Ladeanfrage ändern wir diese Methode und senden den Intent zur weiteren Verarbeitung durch Aufrufen der Methode onNewIntent
der MediaManager
-Instanz. Wenn MediaManager
erkennt, dass der Intent eine Ladeanfrage ist, wird das MediaLoadRequestData
-Objekt aus dem Intent extrahiert und MediaLoadCommandCallback.onLoad()
aufgerufen. Ändern Sie die Methode processIntent
in der Datei PlaybackVideoFragment.kt
so, dass der Intent verarbeitet wird, der die Ladeanfrage enthält:
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.
...
}
Als Nächstes erweitern wir die abstrakte Klasse MediaLoadCommandCallback
, die die von MediaManager
aufgerufene onLoad()
-Methode überschreibt. Diese Methode empfängt die Daten der Ladeanfrage und konvertiert sie in ein Movie
-Objekt. Nach der Konvertierung wird der Film vom lokalen Player abgespielt. Die MediaManager
wird dann mit der MediaLoadRequest
aktualisiert und sendet die MediaStatus
an die verbundenen Absender. Erstellen Sie eine verschachtelte private Klasse mit dem Namen MyMediaLoadCommandCallback
in der Datei PlaybackVideoFragment.kt
:
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
}
Nachdem der Callback definiert wurde, müssen wir ihn bei MediaManager
registrieren. Der Callback muss registriert werden, bevor MediaManager.onNewIntent()
aufgerufen wird. Füge setMediaLoadCommandCallback
hinzu, wenn der Player initialisiert wird:
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())
}
}
}
Beispiel-App ausführen
Klicken Sie auf die Schaltfläche Ausführen, um die App auf Ihrem ATV-Gerät bereitzustellen. Klicken Sie bei Ihrem Sender auf das Cast-Symbol und wählen Sie Ihr Quad-Gerät aus. Die ATV-App wird auf dem Quad-Gerät gestartet. Wähle ein Video auf einem Mobilgerät aus. Die Wiedergabe des Videos wird auf dem ATV gestartet. Prüfen Sie, ob Sie auf Ihrem Smartphone eine Benachrichtigung erhalten, auf der sich die Wiedergabesteuerung befindet. Verwenden Sie z. B. Steuerelemente wie „Pause“ oder „Video auf dem Quad-Gerät“.
7. Unterstützung von Befehlen für die Cast-Steuerung
Die aktuelle App unterstützt jetzt grundlegende Befehle, die mit einer Mediensitzung kompatibel sind, z. B. Wiedergabe, Pause und Suchen. Es gibt jedoch einige Befehle für die Streamingsteuerung, die in der Mediensitzung nicht verfügbar sind. Du musst ein MediaCommandCallback
registrieren, um diese Befehle für die Cast-Steuerung zu unterstützen.
Füge der MediaManager
-Instanz mit setMediaCommandCallback
MyMediaCommandCallback
hinzu, wenn der Player initialisiert wird:
private fun initializePlayer() {
...
castReceiverContext = CastReceiverContext.getInstance()
if (castReceiverContext != null) {
val mediaManager = castReceiverContext!!.mediaManager
...
mediaManager.setMediaCommandCallback(MyMediaCommandCallback())
}
}
Erstellen Sie die MyMediaCommandCallback
-Klasse, um die Methoden zu überschreiben, z. B. onQueueUpdate()
, um diese Steuerungsbefehle für das Cast zu unterstützen:
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. Arbeiten mit Medienstatus
Medienstatus ändern
Cast Connect ruft den Basismedienstatus aus der Mediensitzung ab. Zur Unterstützung erweiterter Funktionen kann deine Android TV-App zusätzliche Statuseigenschaften über eine MediaStatusModifier
angeben und überschreiben. MediaStatusModifier
wird immer für die MediaSession
ausgeführt, die Sie in CastReceiverContext
festgelegt haben.
So geben Sie beispielsweise setMediaCommandSupported
an, wenn der onLoad
-Callback ausgelöst wird:
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
})
}
}
MediaStatus vor dem Senden abfangen
Ähnlich wie bei MessageInterceptor
des Web Receiver SDK kannst du einen MediaStatusWriter
in deinem MediaManager
angeben, um zusätzliche Änderungen an deinem MediaStatus
vorzunehmen, bevor sie an die verbundenen Absender gesendet werden.
Sie können beispielsweise benutzerdefinierte Daten in der MediaStatus
festlegen, bevor Sie sie an mobile Absender senden:
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. Glückwunsch
Jetzt wissen Sie, wie Sie eine Android TV-App mithilfe der Cast Connect-Bibliothek für Google Cast aktivieren.
Weitere Informationen findest du im Entwicklerleitfaden: /cast/docs/android_tv_receiver.