Migracja aplikacji nadawcy na Androida z pakietu SDK Cast w wersji 2 do platformy Cast Application Framework (CAF)

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ą funkcji 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ś kliknie 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 podstaw 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.