Ta procedura umożliwia przekonwertowanie aplikacji dla nadawców na Androida z przesyłania z pakietu SDK w wersji 2 do nadawcy CAF, który jest oparty na CastContext singleton.
Pakiet SDK Cast CAF Sender wykorzystuje CastContext do zarządzania GoogleAPIClient w Twoim imieniu. CastContext zarządza cyklami życia, błędami i wywołaniami zwrotnymi, co znacznie ułatwia tworzenie aplikacji Cast.
Wprowadzenie
- Nadawca CAF jest nadal rozpowszechniany w ramach Usług Google Play za pomocą Menedżera pakietów SDK na Androida,
- Dodano nowe pakiety, które ponosi odpowiedzialność za zapewnienie zgodności z
lista kontrolna projektowania Google Cast (
com.google.android.gms.cast.framework.*
) - Nadawca CAF zapewnia widżety zgodne z wymaganiami dotyczącymi UX Cast. w wersji 2 nie było żadnych komponentów interfejsu i wymagała wdrożenia tych komponentów widżety.
- Aby korzystać z interfejsu Cast API, nie musisz już używać GoogleApiClient.
- Napisy w funkcji CAF Sender są podobne do wersji 2.
Zależności
V2 i CAF mają takie same zależności od bibliotek pomocy i Google Play (wersja 9.2.0 lub nowsza) zgodnie z opisem w sekcji Funkcje biblioteki pomocy Przewodnik
Minimalna wersja pakietu Android SDK obsługiwana przez CAF to 9 (Gingerbread).
Zdarzenie inicjujące
W CAF wymagany jest jawny krok inicjowania platformy Cast. Ten
wymaga zainicjowania
CastContext
singleton przy użyciu odpowiedniego
OptionsProvider
w celu określenia identyfikatora aplikacji odbiornika internetowego oraz innych opcji globalnych.
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;
}
}
Zadeklaruj OptionsProvider
w „aplikacji” tag aplikacji
Plik AndroidManifest.xml
:
<application>
...
<meta-data
android:name=
"com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.google.sample.cast.refplayer.CastOptionsProvider" />
</application>
Leniwie zainicjuj CastContext
w metodzie onCreate
każdej aktywności:
private CastContext mCastContext;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_browser);
setupActionBar();
mCastContext = CastContext.getSharedInstance(this);
}
Te czynności nie były konieczne w wersji 2.
Wykrywanie urządzeń
W CAF proces wykrywania jest uruchamiany i zatrzymywany automatycznie przez
gdy aplikacja działa na pierwszym planie i działa w tle,
. Wartości MediaRouteSelector
i MediaRouter.Callback
nie powinny być
.
Przycisk przesyłania i okno przesyłania
Tak jak w wersji 2, komponenty te są dostarczane przez dział pomocy MediaRouter Biblioteka.
Przycisk Cast jest nadal wdrożony przez
MediaRouteButton
i można je dodać do Twojej aktywności (za pomocą
ActionBar
lub
Toolbar
),
jako pozycję menu.
<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"/>
Zastąp metodę onCreateOptionMenu()
każdej aktywności za pomocą parametru
CastButtonFactory
by podłączyć MediaRouteButton
do platformy Cast:
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;
}
Gdy ktoś naciśnie przycisk, automatycznie wyświetli się okno Przesyłaj.
Sterowanie urządzeniem
W CAF sterowanie urządzeniem jest obsługiwane w dużej mierze przez platformę. Nadawca
nie musi obsługiwać (i nie powinna próbować obsługi) łączenia się z
i uruchomić odbiornik internetowy przy użyciu
GoogleApiClient
Interakcja między nadawcą a odbiornikiem internetowym jest teraz reprezentowana
jako „sesję”.
SessionManager
klasa obsługuje cykl życia sesji oraz automatycznie rozpoczyna i zatrzymuje sesje
w odpowiedzi na gesty użytkownika: sesja rozpoczyna się, gdy użytkownik wybierze opcję przesyłania
jest wyświetlane w oknie przesyłania i kończy się, gdy użytkownik kliknie przycisk „Zatrzymaj przesyłanie”.
w oknie przesyłania lub gdy aplikacja nadawcy zostanie zamknięta. Nadawca
można powiadamiać aplikację o zdarzeniach cyklu życia sesji przez zarejestrowanie
SessionManagerListener
dzięki SessionManager
. Wywołania zwrotne SessionManagerListener
definiują
metod wywołania zwrotnego dla wszystkich zdarzeń cyklu życia sesji.
CastSession
reprezentuje sesję z urządzeniem Cast. Klasa ma metody dla
sterowanie głośnością urządzenia i stanami wyciszenia, co było wcześniej dostępne w wersji 2;
za pomocą metod na stronie Cast.CastApi
.
W wersji v2 funkcja
Cast.Listener
wywołania zwrotne stanowiące powiadomienia o zmianach stanu urządzenia, w tym
głośność, stan wyciszenia, stan gotowości itd.
W CAF powiadomienia o zmianie głośności/stanu wyciszenia są nadal dostarczane przez wywołanie zwrotne
Cast.Listener
; ci słuchacze są zarejestrowani w
CastSession
Wszystkie pozostałe powiadomienia o stanie urządzenia są dostarczane przez
CastStateListener
wywołania zwrotne; ci słuchacze są zarejestrowani w CastSession
. Upewnij się, że
nadal wyrejestruj detektory, gdy powiązane fragmenty, działania lub aplikacje przestaną działać
w tle.
Logika ponownego połączenia
Tak jak w wersji 2, CAF próbuje ponownie nawiązać połączenia sieciowe, które utracone z powodu tymczasowej utraty sygnału Wi-Fi lub innych błędów sieci. To jest teraz na poziomie sesji; sesja może zostać zawieszona w tym przypadku połączenie zostanie przerwane i nastąpi przejście z powrotem do stanu „połączonego”; określ, kiedy połączenie zostało przywrócone. Platforma zapewnia ponowne połączenie W ramach tego procesu należy użyć aplikacji Web Receiver i ponownie podłączyć kanały Cast.
Oprócz tego funkcja CAF dodaje też automatyczne wznawianie sesji, które jest włączone przez
domyślnie (i można go dezaktywować za pomocą
CastOptions
Jeśli aplikacja nadawcy zostanie przesłana w tle lub zostanie zakończona (przez
przesuń palcem w bok lub z powodu wypadku) podczas trwania sesji przesyłania
platforma spróbuje wznowić tę sesję, gdy aplikacja nadawcy
wraca na pierwszy plan lub zostaje ponownie uruchomiony; jest to przetwarzane automatycznie przez
SessionManager
, który wysyła odpowiednie wywołania zwrotne do wszystkich zarejestrowanych numerów.
SessionManagerListener
instancji.
Rejestracja kanału niestandardowego
W wersji 2 kanały niestandardowe (zaimplementowane za pomocą
Cast.MessageReceivedCallback
)
są zarejestrowane w Cast.CastApi
. W CAF kanały niestandardowe są zamiast tego rejestrowane w funkcji
CastSession
instancja. Można się zarejestrować na stronie
SessionManagerListener.onSessionStarted
metody wywołania zwrotnego. W przypadku aplikacji multimedialnych nie jest już konieczne bezpośrednie
zarejestrować kanał sterowania multimediami za pomocą Cast.CastApi.setMessageReceivedCallbacks
;
Więcej informacji znajdziesz w następnej sekcji.
Sterowanie multimediami
Klasa w wersji 2
RemoteMediaPlayer
jest przestarzały i nie należy go używać. W CAF jest ona zastępowana przez nowy
RemoteMediaClient
, która zapewnia równoważne funkcje w wygodniejszym interfejsie API. Jest
nie jest konieczne do jawnego zainicjowania ani zarejestrowania tego obiektu; platforma
automatycznie utworzy instancję obiektu i zarejestruje bazowy nośnik
kanału w momencie rozpoczęcia sesji, jeśli podłączona jest aplikacja odbiornika internetowego
obsługuje przestrzeń nazw multimediów.
Dostęp do RemoteMediaClient
można uzyskać jako
Metoda getRemoteMediaClient
obiektu CastSession
.
W wersji 2 wszystkie żądania mediów wysłane na ten kraj: RemoteMediaPlayer
zwracały błąd
RemoteMediaPlayer.MediaChannelResult
przez wywołanie zwrotne PendingResult
.
W CAF wszystkie żądania mediów wysłane w RemoteMediaClient
zwracają błąd
RemoteMediaClient.MediaChannelResult
.
przez
PendingResult
wywołania zwrotnego, które może służyć do śledzenia postępów i ostatecznego wyniku
użytkownika.
RemoteMediaPlayer
w wersji 2 będzie wysyłać powiadomienia o zmianach w multimediach
stanu odtwarzacza w odbiorniku internetowym
RemoteMediaPlayer.OnStatusUpdatedListener
W CAF funkcja RemoteMediaClient
udostępnia równoważne wywołania zwrotne za pomocą
RemoteMediaClient.Listener
.
za pomocą prostego interfejsu online. W
RemoteMediaClient
, która umożliwia wielu komponentom nadawcy udostępnianie
pojedynczą instancję RemoteMediaClient
powiązaną z sesją.
W wersji 2 to aplikacja nadawcy musiała przyjąć na siebie ciężar utrzymywania użytkownika interfejs zsynchronizowany ze stanem odtwarzacza w odbiorniku internetowym.
W CAF klasa
UIMediaController
bierze na siebie większość jego obowiązków.
Nakładka wprowadzająca
Wersja 2 nie udostępnia wprowadzającego interfejsu użytkownika nakładki.
CAF udostępnia widok niestandardowy
IntroductoryOverlay
aby wyróżnić przycisk Cast, gdy wyświetla się on po raz pierwszy.
Minikontroler
W wersji 2 musisz wdrożyć od zera minikontroler w aplikacji nadawcy.
W CAF pakiet SDK udostępnia widok niestandardowy,
MiniControllerFragment
,
który możesz dodać do pliku układu aplikacji,
który ma być widoczny.
Powiadomienia i ekran blokady
W wersji 2 pakiet SDK nie udostępnia kontrolerów do obsługi powiadomień i ekranu blokady. W przypadku tego pakietu SDK musisz dodać te funkcje do aplikacji nadawcy za pomocą Interfejsy API platformy Android.
W CAF pakiet SDK udostępnia
NotificationsOptions.Builder
aby łatwiej tworzyć opcje sterowania multimediami na ekranie powiadomień i ekranu blokady
w aplikacji nadawcy. Można włączyć ustawienia powiadomień i ekranu blokady
z
CastOptions
podczas inicjowania funkcji 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();
}
Rozwinięty kontroler
W wersji 2 musisz wdrożyć od zera rozszerzony kontroler aplikacji nadawcy.
CAF zapewnia
UIMediaController
klasa pomocnicza, która ułatwia tworzenie własnych rozszerzonych plików
kontrolerem.
CAF dodaje gotowy widżet rozszerzonego kontrolera
ExpandedControllerActivity
które możesz po prostu dodać do aplikacji. Nie musisz już
zaimplementuj niestandardowy rozszerzony kontroler za pomocą UIMediaController
.
Aktywność audio
W wersji 2 do zarządzania aktywnością audio musisz używać narzędzia MediaSessionCompat
.
W CAF sterowanie dźwiękiem jest zarządzane automatycznie.
Logowanie debugowania
W CAF nie ma opcji logowania.
Przykładowe aplikacje
Mamy samouczki z programowania oraz przykładowe aplikacje korzystających z CAF.