Mit den folgenden Schritten kannst du deine Android-Sender-App von Cast konvertieren SDK v2 an CAF-Sender, der auf dem CastContext Singleton.
Das Cast CAF Sender SDK verwendet CastContext zur Verwaltung des GoogleAPIClient in deinem Namen. CastContext verwaltet Lebenszyklen, Fehler und Rückrufe für Sie, was sehr vereinfacht die Entwicklung einer Cast-App.
Einführung
- Der CAF-Sender wird weiterhin über die Google Play-Dienste bereitgestellt mit dem Android SDK Manager
- Es wurden neue Pakete hinzugefügt, die die Einhaltung der
Checkliste für das Google Cast-Design (
com.google.android.gms.cast.framework.*
) - Der CAF-Sender stellt Widgets bereit, die den Cast UX-Anforderungen entsprechen. In Version 2 wurden keine UI-Komponenten bereitgestellt, sodass Sie diese implementieren mussten. Widgets.
- Für die Nutzung der Cast API ist die Verwendung von GoogleApiClient nicht mehr erforderlich.
- Die Untertitelung in CAF Sender ähnelt v2.
Abhängigkeiten
V2 und CAF haben dieselben Abhängigkeiten von den Supportbibliotheken und Google Play -Dienste (9.2.0 oder höher), wie unter Funktionen der Supportbibliothek beschrieben Leitfaden
CAF muss mindestens die Android SDK-Version 9 (Gingerbread) unterstützen.
Initialisierung
In CAF ist ein expliziter Initialisierungsschritt für das Cast-Framework erforderlich. Dieses
beinhaltet die Initialisierung der
CastContext
Singleton mit einem geeigneten
OptionsProvider
zum Angeben der Web Receiver-Anwendungs-ID und anderer globaler Optionen.
public class CastOptionsProvider implements OptionsProvider {
@Override
public CastOptions getCastOptions(Context context) {
return new CastOptions.Builder()
.setReceiverApplicationId(context.getString(R.string.app_id))
.build();
}
@Override
public List<SessionProvider> getAdditionalSessionProviders(Context context) {
return null;
}
}
Deklarieren Sie OptionsProvider
innerhalb der Anwendung Tag der App
AndroidManifest.xml
-Datei:
<application>
...
<meta-data
android:name=
"com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.google.sample.cast.refplayer.CastOptionsProvider" />
</application>
Initialisieren Sie CastContext
verzögert in der onCreate
-Methode jeder Aktivität:
private CastContext mCastContext;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_browser);
setupActionBar();
mCastContext = CastContext.getSharedInstance(this);
}
Diese Schritte waren in Version 2 nicht erforderlich.
Geräteerkennung
In CAF wird der Erkennungsprozess automatisch vom
wenn die App in den Vordergrund wechselt und in den Hintergrund wechselt,
. MediaRouteSelector
und MediaRouter.Callback
dürfen nicht
verwendet.
Cast-Symbol und Streaming-Dialogfeld
Wie in Version 2 werden diese Komponenten vom MediaRouter-Support Bibliothek.
Das Cast-Symbol wird weiterhin vom
MediaRouteButton
und können Ihrer Aktivität hinzugefügt werden (entweder
ActionBar
oder
Toolbar
),
als Menüpunkt in Ihrem Menü.
<item
android:id="@+id/media_route_menu_item"
android:title="@string/media_route_menu_title"
app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
app:showAsAction="always"/>
onCreateOptionMenu()
-Methode für jede Aktivität überschreiben, indem
CastButtonFactory
um MediaRouteButton
mit dem Cast-Framework zu verbinden:
private MenuItem mediaRouteMenuItem;
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.browse, menu);
mediaRouteMenuItem =
CastButtonFactory.setUpMediaRouteButton(getApplicationContext(),
menu,
R.id.media_route_menu_item);
return true;
}
Wenn jemand auf die Schaltfläche tippt, wird automatisch das Cast-Dialogfeld angezeigt.
Gerätesteuerung
In CAF wird die Gerätesteuerung weitgehend vom Framework übernommen. Absender
Anwendung nicht verarbeiten muss (und sollte auch nicht versuchen), die Verbindung zu
und starten Sie die Web Receiver-App mithilfe der
GoogleApiClient
Interaktion zwischen Sender und Webempfänger wird jetzt dargestellt
als „Sitzung“. Die
SessionManager
wickelt den Sitzungslebenszyklus ab und startet und beendet Sitzungen automatisch
als Reaktion auf Nutzergesten: Eine Sitzung wird gestartet, wenn der Nutzer ein Cast-Symbol auswählt.
Gerät im Cast-Dialogfeld angezeigt und wird beendet, wenn der Nutzer auf die Schaltfläche „Streaming beenden“ tippt
im Cast-Dialogfeld oder wenn die Sender-App selbst beendet wird. Absender
Anwendung über Sitzungslebenszyklus-Ereignisse informiert werden, indem eine
SessionManagerListener
mit SessionManager
. Die SessionManagerListener
-Callbacks definieren
Callback-Methoden für alle Lebenszyklusereignisse einer Sitzung.
Die
CastSession
-Klasse steht für eine Sitzung mit einem Übertragungsgerät. Die Klasse verfügt über Methoden für
zum Steuern der Gerätelautstärke und zum Stummschalten, was bisher in Version 2 der
mit Methoden auf Cast.CastApi
.
In Version 2 enthält der Parameter
Cast.Listener
Callbacks für Benachrichtigungen über Änderungen des Gerätestatus, einschließlich
Lautstärke, Stummschaltung, Stand-by-Status usw.
In CAF werden Benachrichtigungen über Statusänderungen der Lautstärke/Stummschaltung weiterhin per Rückruf zugestellt.
Methoden in Cast.Listener
; Diese Listener sind registriert mit
CastSession
Alle verbleibenden Gerätestatusbenachrichtigungen werden über
CastStateListener
Callbacks Diese Listener sind in der CastSession
registriert. Achten Sie darauf,
die Registrierung von Listenern immer noch aufzuheben, wenn die zugehörigen Fragmente, Aktivitäten oder Apps
in den Hintergrund.
Logik für die erneute Verbindung
Wie bei v2 versucht CAF, Netzwerkverbindungen wiederherzustellen, aufgrund eines vorübergehenden WLAN-Signals oder anderer Netzwerkfehler verloren gehen. Das ist jetzt auf Sitzungsebene durchgeführt, kann eine Sitzung in eine "gesperrte" wenn der Parameter wird die Verbindung unterbrochen und sie wechselt wieder zu „verbunden“. Zustand, wenn Verbindung wurde wiederhergestellt. Das Framework stellt die Verbindung zum Web Receiver App und stellen dabei die Verbindung aller Übertragungskanäle wieder her.
Außerdem fügt CAF
die automatische Wiederaufnahme von Sitzungen hinzu,
Standardeinstellung (kann deaktiviert werden über
CastOptions
Wenn die Absenderanwendung in den Hintergrund verschoben oder beendet wird (durch
oder aufgrund eines Absturzes wegwischen, wird das Signal
wird das Framework versuchen,
diese Sitzung fortzusetzen, wenn die Absenderanwendung
kehrt in den Vordergrund zurück oder wird neu gestartet; wird dies automatisch vom
SessionManager
, das die entsprechenden Callbacks für alle registrierten
SessionManagerListener
Instanzen.
Registrierung eines benutzerdefinierten Channels
In Version 2 wurden benutzerdefinierte Channels (die mithilfe von
Cast.MessageReceivedCallback
)
sind in der Cast.CastApi
registriert. In CAF werden benutzerdefinierte Channels stattdessen mit dem
CastSession
-Instanz. Die Registrierung kann in der
SessionManagerListener.onSessionStarted
. Für Medienanwendungen ist es nicht mehr erforderlich,
den Mediensteuerungskanal über Cast.CastApi.setMessageReceivedCallbacks
registrieren;
finden Sie im folgenden Abschnitt weitere Informationen.
Mediensteuerung
Die v2-Klasse
RemoteMediaPlayer
ist veraltet und sollte nicht mehr verwendet werden. In CAF wird es durch das neue
RemoteMediaClient
-Klasse, die gleichwertige Funktionen in einer praktischeren API bietet. Es ist
Es ist nicht erforderlich, dieses Objekt explizit zu initialisieren oder zu registrieren. Framework
wird automatisch das Objekt instanziiert und das zugrunde liegende Medium registriert.
Kanal zu Beginn der Sitzung, wenn die Web Receiver-Anwendung mit
unterstützt den Medien-Namespace.
Auf RemoteMediaClient
kann zugegriffen werden als
Methode getRemoteMediaClient
des Objekts CastSession
.
In Version 2 würden alle an den RemoteMediaPlayer
gesendeten Medienanfragen den Fehler
RemoteMediaPlayer.MediaChannelResult
über einen PendingResult
-Callback.
In CAF geben alle am RemoteMediaClient
gesendeten Medienanfragen einen Fehler zurück:
RemoteMediaClient.MediaChannelResult
über ein
PendingResult
Callback, mit dem der Fortschritt und das Endergebnis der
RemoteMediaPlayer
(v2) hat Benachrichtigungen zu Änderungen in den Medien gesendet
Player-Status beim Web Receiver über die
RemoteMediaPlayer.OnStatusUpdatedListener
.
In CAF stellt RemoteMediaClient
äquivalente Callbacks über seine
RemoteMediaClient.Listener
. Eine beliebige Anzahl von Listenern kann mit dem
RemoteMediaClient
, wodurch mehrere Absenderkomponenten die Möglichkeit haben,
einzelne Instanz von RemoteMediaClient
, die der Sitzung zugeordnet ist.
In Version 2 musste die Senderanwendung die Last übernehmen, den Nutzer mit dem Mediaplayer-Status auf dem Web Receiver synchronisiert.
In CAF hat der Kurs
UIMediaController
übernimmt einen Großteil dieser Verantwortung.
Einleitendes Overlay
Version 2 bietet keine einführende Overlay-Benutzeroberfläche.
CAF bietet eine benutzerdefinierte Ansicht
IntroductoryOverlay
um das Cast-Symbol hervorzuheben, wenn es Nutzern zum ersten Mal angezeigt wird.
Mini-Controller
In Version 2 müssen Sie einen neuen Mini-Controller in der Sender-App implementieren.
In CAF bietet das SDK eine
benutzerdefinierte Ansicht,
MiniControllerFragment
,
die Sie der App-Layoutdatei der Aktivitäten hinzufügen können,
den Mini-Controller zeigen.
Benachrichtigungen und Sperrbildschirm
In Version 2 werden vom SDK keine Controller für Benachrichtigungen und Sperrbildschirm bereitgestellt. Für dieses SDK müssen Sie diese Funktionen mithilfe der Android-Framework-APIs
In CAF stellt das SDK ein
NotificationsOptions.Builder
zum Erstellen von Mediensteuerelementen für Benachrichtigungen und Sperrbildschirm
in die Absender-App ein. Benachrichtigungs- und Sperrbildschirmeinstellungen können aktiviert werden
mit dem
CastOptions
beim Initialisieren von CastContext
.
public CastOptions getCastOptions(Context context) {
NotificationOptions notificationOptions = new NotificationOptions.Builder()
.setTargetActivityClassName(VideoBrowserActivity.class.getName())
.build();
CastMediaOptions mediaOptions = new CastMediaOptions.Builder()
.setNotificationOptions(notificationOptions)
.build();
return new CastOptions.Builder()
.setReceiverApplicationId(context.getString(R.string.app_id))
.setCastMediaOptions(mediaOptions)
.build();
}
Maximierter Controller
In Version 2 müssen Sie einen erweiterten Controller in die Absender-App.
CAF bietet eine
UIMediaController
Hilfsklasse, mit der Sie ganz einfach Ihre eigene erweiterte
Controller.
CAF bietet ein vorgefertigtes erweitertes Controller-Widget
ExpandedControllerActivity
die Sie einfach Ihrer App hinzufügen können. Sie müssen nicht mehr
Implementieren Sie mithilfe von UIMediaController
einen benutzerdefinierten erweiterten Controller.
Audiofokus
In Version 2 müssen Sie MediaSessionCompat
verwenden, um den Audiofokus zu verwalten.
In CAF wird der Audiofokus automatisch verwaltet.
Fehlerprotokollierung
In CAF gibt es keine Logging-Optionen.
Beispielapps
Wir haben Codelab-Anleitungen und Beispiel-Apps die CAF verwenden.