Komponenty systemu i przepływy danych

Ten diagram przedstawia komponenty, które współpracują z Media:

Elementy systemu

Rysunek 1. Elementy systemu

Elementy na tym rysunku są opisane w tabeli:

Komponent Opis
Ekran główny Reprezentuje inne elementy w interfejsie samochodu, które wyświetlają i sterują odtwarzanymi obecnie multimediami. W AOSP jest to główny ekran wyświetlany po uruchomieniu systemu. Na tym ekranie użytkownicy mogą wyświetlać szczegóły odtwarzanego elementu multimedialnego oraz wykonywać ograniczony zestaw standardowych i niestandardowych działań (np. odtwarzanie i wstrzymywanie).
Interfejs systemu Umożliwia korzystanie z globalnych opcji nawigacji w interfejsie, np. przechodzenie do multimediów.
Asystenci Android udostępnia mechanizmy, które umożliwiają różnym aplikacjom asystenta głosowego interakcję z systemem. Te aplikacje mogą wchodzić w interakcję ze źródłami multimediów w tle (np. odtwarzać utwór w wyniku polecenia głosowego) lub przełączać się na Media na pierwszym planie (np. gdy aplikacja asystenta głosowego otrzyma instrukcję wyświetlenia interfejsu konkretnego źródła multimediów).
Menu z aplikacjami Wszystkie aplikacje na Androida uruchamiają się w Menu z aplikacjami, w tym Źródła multimediów. Multimedia mogą mieć własny selektor źródeł multimediów, który uzupełnia lub zastępuje aplikację Uruchom aplikację jako miejsce rozpoczęcia dla multimediów.
Sklep Google Play Gdy korzystają z GAS, mogą tu znajdować i instalować nowe aplikacje na urządzeniu z Androidem. W przypadku multimediów po zainstalowaniu aplikacji użytkownicy są kierowani do aplikacji Media, aby dokończyć proces logowania lub rozpocząć korzystanie z aplikacji.
Menedżer sesji multimedialnej Usługa systemu Android, która śledzi sesje multimediów ze wszystkich źródeł multimediów i je kontroluje. Zawiera mechanizmy wykrywania, kiedy źródło multimediów staje się źródłem multimediów na pierwszym planie. Media i wszystkie inne aplikacje wyświetlające aktualnie odtwarzany źródło multimediów (np. ekran główny) korzystają z menedżera sesji multimediów, aby wykrywać te zdarzenia i odpowiednio aktualizować interfejs. Źródła multimediów komunikują się z Menedżerem sesji multimediów za pomocą interfejsu Media Session API.
Radio Specjalna aplikacja do obsługi sprzętu radiowego. Radio wyszukiwać stacje radiowe, szybko wybierać ostatnio zidentyfikowane stacje i przełączać się między pasmami radiowymi. Elementy interfejsu użytkownika, które są wspólne dla radia i multimediów, umożliwiają użytkownikowi przełączanie się między tymi dwoma funkcjami.
Silnik dotyczący rozpraszania uwagi kierowcy Usługa systemu Android używana do nakładania ograniczeń UX na podstawie stanu jazdy samochodu. W przypadku logowania się w źródłach multimediów i ustawień (gdzie ekran jest kontrolowany bezpośrednio przez źródła multimediów) usługa ta zapewnia, że podczas jazdy samochodem nie będą wyświetlane niebezpieczne treści. Producenci OEM mogą dostosować definicję tych stanów i sposób reakcji systemu w tych sytuacjach (np. wyświetlając blokujący ekran nakładki).

Wzorce przeglądania

Uruchamianie aplikacji do multimediów

Poniżej zobaczysz proces uruchamiania aplikacji Media.

Uruchamianie aplikacji do multimediów

Rysunek 2. Uruchamianie aplikacji do multimediów

Multimediów nie można uruchamiać za pomocą domyślnych opcji CAR_INTENT_ACTION_MEDIA_TEMPLATE. Ta intencja może zawierać te informacje jako dodatkowe:

  • android.car.intent.extra.MEDIA_COMPONENT (opcjonalnie). Ciąg znaków reprezentujący spłaszczony komponent MediaBrowserService w aplikacji multimedialnej, z którą ma się połączyć Media. Jeśli nie jest podany, Media wyświetla aktualnie wybraną aplikację multimedialną. Ta intencja jest używana w tych punktach wejścia:

    • Interfejs systemu. Używany do powrotu do interfejsu Media lub do rozpoczęcia korzystania z niego po raz pierwszy. W tym przypadku użyto by tego samego polecenia, ale bez dodatkowych elementów, aby spowodować wyświetlenie przez Media aktualnie wybranej aplikacji multimedialnej.

    • Ekran główny, asystenci i centrum powiadomień. Użytkownicy mogą przejść do multimediów, aby wyświetlić aktualnie wybraną aplikację multimedialną. We wszystkich przypadkach uruchamiany jest domyślny zamiar bez dodatkowych funkcji.

    • Menu z aplikacjami Gdy użytkownicy wybierają aplikację do multimediów w menu z aplikacjami, powyższa intencja obejmuje dodatkowy element CAR_EXTRA_MEDIA_COMPONENT, który zawiera wybraną aplikację do multimediów. Media wyznaczają ją jako nowo wybraną aplikację i z nią się łączą. Szczegółowe informacje znajdziesz w sekcji poniżej Integracja Launchera z Media.

Menu z aplikacjami do integracji z Media

Aplikacje do multimediów nie mogą udostępniać żadnych działań oznaczonych kategorią android.intent.category.LAUNCHER. W związku z tym aplikacja App Launcher (lub jej odpowiednik) musi stosować specjalną logikę, aby umożliwić integrację źródeł multimediów:

  • Menu z aplikacjami musi skanować system pod kątem pakietów implementujących MediaBrowserService.SERVICE_INTERFACE. W przypadku tych pakietów App Launcher pobiera ikonę usługi w sposób podobny do tego, w jaki pobiera inne aktywności.

  • Następnie łączy te pakiety z tymi, które implementują aktywności android.intent.category.LAUNCHER. Jeśli aplikacja udostępnia implementację MediaBrowserService i aktywność w wyszukiwarce, pierwszeństwo ma usługa.

    W momencie pisania tego tekstu żadna aplikacja źródła multimediów nie może udostępniać aktywności uruchamiania.

  • Przykład tej logiki znajdziesz w kodzie AOSP na stronie AppLauncherUtils#getAllLauncherApps().

Proces logowania i opcje konfiguracji

Aplikacje do multimediów mogą zawierać działanie Ustawienia zoptymalizowane pod kątem pojazdu. Takie działanie może służyć do implementowania ścieżek użytkownika, które nie są obsługiwane przez interfejsy Media API na Androida, np.:

  • Zaloguj się
  • Wylogowanie
  • Przełączanie kont
  • Wyświetlanie, z którego użytkownik jest obecnie zalogowany (jeśli istnieje)
  • Konfiguracja usługi

Proces logowania

Rysunek 3. Proces logowania

Ta aktywność ustawień jest deklarowana przez aplikację multimedialną za pomocą tego filtra intencji:

<activity android:name=".AppSettingsActivity"
          android:exported="true
          android:theme="@style/SettingsActivity"
           android:label="@string/app_settings_activity_title">
   <intent-filter>
       <action android:name="android.intent.action.APPLICATION_PREFERENCES"/>
   </intent-filter>
</activity>

Media muszą implementować tę logikę:

  • Sprawdź, czy wybrana aplikacja do multimediów zawiera działanie z danym filtrem intencji.

  • Jeśli tak, pozwól użytkownikowi przejść do aktywności.

  • Jeśli obowiązują ograniczenia dotyczące UX w samochodzie (np. samochód jest w ruchu), ta funkcja powinna być wyłączona, ponieważ aktywność w Ustawieniach nie jest elementem interfejsu zoptymalizowanego pod kątem kierowcy.

Obsługa błędów i wymaganie logowania

Media współdziała z aplikacjami multimedialnymi za pomocą interfejsu Media Session API na Androida. W ramach tego interfejsu API Media otrzymuje obiekt PlaybackState, który przekazuje bieżący stan aplikacji multimedialnej.

Proces logowania rozpoczyna się, gdy aplikacja multimedialna zmieni się z PlaybackState na STATE_ERROR, w tym konkretny kod błędu (szczegóły poniżej). W takim przypadku Media wyświetlają opis błędu i opcję przejścia do aktywności logowania zaimplementowanej przez aplikację do obsługi multimediów.

Aplikacje mogą używać tego samego procesu do sygnalizowania innych błędów (np. błędu łączności z serwerem).

Obsługa błędów

Rysunek 4. Obsługa błędów

W ramach zwykłej obsługi błędów PlaybackState Media muszą sprawdzić te dane wejściowe.

  • Kod błędu PlaybackState równy: PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED. Oznacza to, że aplikacja multimedialna wymaga zalogowania się, aby kontynuować działanie. Mogą się pojawić inne kody błędów, które wskazują na inne typy błędów.

  • Komunikat o błędzie PlaybackState (ustawiony przez aplikacje multimedialne za pomocą metody PlaybackStateCompat.Builder#setErrorMessage) zawiera zrozumiałe dla człowieka wyjaśnienie (np. „Nie jesteś zalogowany”). Komunikat musi być wyświetlany użytkownikowi i musi być zoptymalizowany pod kątem rozpraszania uwagi podczas jazdy.

  • Opcjonalnie PlaybackState może zawierać te dodatkowe informacje (ustawiane przez aplikacje multimedialne za pomocą metody PlaybackStateCompat.Builder#setExtras) z tymi kluczami.

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL. Ustaw jako ciąg tekstowy zawierający zrozumiały dla człowieka komunikat, który ma być wyświetlany na przycisku, którego dotknięcie przez użytkownika powoduje rozpoczęcie procesu logowania.

    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT. Ustaw PendingIntent, aby akcja była wykonywana po kliknięciu przez użytkownika przycisku. Ten PendingIntent wskazuję na niestandardową aktywność logowania zaimplementowaną przez tę samą aplikację multimedialną.

  • Wartość PlaybackState jest równa: STATE_ERROR. Oznacza to, że do czasu zakończenia logowania nie można wykonać żadnej innej operacji.