Das folgende Diagramm zeigt die Komponenten, die mit Media interagieren:
Abbildung 1: Systemkomponenten
Die Elemente in dieser Abbildung werden in der Tabelle beschrieben:
Komponente | Beschreibung |
---|---|
Startbildschirm | Stellt andere Oberflächen in der Benutzeroberfläche des Autos dar, auf denen die derzeit wiedergegebenen Medien angezeigt und gesteuert werden. In AOSP ist dies der Hauptbildschirm, der beim Starten des Systems angezeigt wird. Auf diesem Bildschirm können Nutzer Details zum wiedergegebenen Medienelement aufrufen und eine begrenzte Anzahl von Standard- und benutzerdefinierten Aktionen ausführen (z. B. Wiedergabe und Pause). |
System-UI | Bietet Funktionen, darunter globale Navigationsoptionen für die Benutzeroberfläche, z. B. zum Aufrufen von „Medien“. |
Assistenten | Android bietet Mechanismen, mit denen verschiedene Sprachassistenten-Apps mit dem System interagieren können. Diese Apps können im Hintergrund mit Medienquellen interagieren (z. B. einen Titel als Folge eines Sprachbefehls abspielen) oder im Vordergrund zu Medien wechseln (z. B. wenn eine Sprachassistenten-App angewiesen wird, die Benutzeroberfläche einer bestimmten Medienquelle anzuzeigen). |
App Launcher | Alle Android-Apps werden im App Launcher gestartet, einschließlich Medienquellen. Medien können eine eigene Auswahl für die Medienquelle haben, die den App Launcher als Ausgangspunkt für Medien ergänzt oder ersetzt. |
Google Play Store | Wenn GAS verwendet wird, suchen und installieren Nutzer hier neue Apps auf einem Android-Gerät. Bei Medien werden Nutzer nach der Installation der Apps zu den Medien weitergeleitet, um sich anzumelden oder mit der App zu interagieren. |
Media Session Manager | Android-Systemdienst, der Mediensitzungen aus allen Medienquellen erfasst und steuert. Es bietet Mechanismen, um zu erkennen, wann eine Medienquelle zur Medienquelle im Vordergrund wird. In der Media App und in allen anderen Apps, in denen die aktuell wiedergegebene Medienquelle angezeigt wird (z. B. auf dem Startbildschirm), werden diese Ereignisse mit dem Media Session Manager erkannt und die Benutzeroberfläche entsprechend aktualisiert. Medienquellen interagieren über die Media Session API mit dem Media Session Manager. |
Radio | Spezielle App zur Interaktion mit der Funkhardware. Radio sucht nach Radiosendern, wählt schnell kürzlich erkannte Sender aus und wechselt zwischen Radiobändern. Gemeinsame UI-Komponenten von Radio und Medien ermöglichen es Nutzern, zwischen den beiden Optionen zu wechseln. |
Driver Distraction Engine | Android-Systemdienst, mit dem UX-Einschränkungen basierend auf dem Fahrstatus des Fahrzeugs erzwungen werden. Bei der Anmeldung und den Einstellungen für Medienquellen (wo der Bildschirm direkt von den Medienquellen gesteuert wird) sorgt dieser Dienst dafür, dass keine unsicheren Inhalte angezeigt werden, wenn sich das Auto im Fahrzustand befindet. OEMs können die Definition dieser Status und die Reaktion des Systems in diesen Situationen anpassen, z. B. durch das Einblenden eines Blockierungsbildschirms. |
User-Flows
Start der Medien-App
Unten sehen Sie den Prozess, der Media startet.
Abbildung 2: Start der Medien-App
Medien müssen mit der folgenden impliziten
CAR_INTENT_ACTION_MEDIA_TEMPLATE
gestartet werden.
Dieser Intent kann die folgenden Informationen als Zusatzinformationen enthalten:
-
android.car.intent.extra.MEDIA_COMPONENT
(optional). String extra, um den abgeflachten Komponentennamen einesMediaBrowserService
in der Medien-App anzugeben, mit der die Medien verbunden werden sollen. Wenn nicht angegeben, wird in „Medien“ die aktuell ausgewählte Medien-App angezeigt. Dieser Intent wird über die folgenden Einstiegspunkte verwendet:-
System-UI. Damit kehren Sie zur Medienoberfläche zurück oder verwenden sie zum ersten Mal. In diesem Fall wird der obige Intent ohne zusätzliche Parameter verwendet, damit in Media die aktuell ausgewählte Medien-App angezeigt wird.
-
Startbildschirm, Assistenten und Benachrichtigungszentrale. Nutzer können zu „Medien“ gehen, um die aktuell ausgewählte Medien-App aufzurufen. In allen Fällen wird der implizite Intent ohne Extras ausgelöst.
-
App Launcher Wenn Nutzer eine Medien-App über den App Launcher auswählen, enthält die obige Absicht das Extra
CAR_EXTRA_MEDIA_COMPONENT
, das die ausgewählte Medien-App enthält. Media bezeichnet dies als neu ausgewählte App und stellt eine Verbindung her. Weitere Informationen finden Sie im Abschnitt unten „App Launcher-Integration in Medien“.
-
App Launcher zur Medienintegration
In Medien-Apps dürfen keine Aktivitäten mit der Kategorie android.intent.category.LAUNCHER
versehen werden. Daher muss der App Launcher (oder ein entsprechendes Äquivalent) eine spezielle Logik für die Integration von Medienquellen implementieren:
-
Der App Launcher muss das System nach Paketen mit
MediaBrowserService.SERVICE_INTERFACE
durchsuchen. Für diese Pakete ruft der App Launcher das Dienstsymbol ab, das auch für andere Aktivitäten verwendet wird. -
Der App Launcher kombiniert diese Pakete dann mit denen, die
android.intent.category.LAUNCHER
-Aktivitäten implementieren. Wenn eine App eineMediaBrowserService
-Implementierung und eine Launcher-Aktivität bereitstellt, hat der Dienst Vorrang.Zum Zeitpunkt der Erstellung dieses Artikels kann keine Medienquellen-App eine Launcher-Aktivität bereitstellen.
- Ein Beispiel für diese Logik finden Sie im AOSP-Code unter
AppLauncherUtils#getAllLauncherApps()
.
Anmeldeablauf und Konfigurationsoptionen
Medien-Apps können eine für das Fahrzeug optimierte Einstellungsaktivität enthalten. Mit einer solchen Aktivität können Nutzerflüsse implementiert werden, die nicht von den Android Media APIs abgedeckt werden, z. B.:
- Anmelden
- Abmelden
- Wechsel zwischen Konten
- Display, in dem der Nutzer aktuell angemeldet ist (falls zutreffend)
- Dienstkonfiguration
Abbildung 3: Anmeldevorgang
Diese Aktivität für Einstellungen wird von der Medien-App mit dem folgenden Intent-Filter deklariert:
<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>
Medien müssen die folgende Logik implementieren:
-
Prüfen Sie, ob die aktuell ausgewählte Medien-App eine Aktivität mit dem angegebenen Intent-Filter enthält.
-
Wenn ja, lassen Sie den Nutzer zur Aktivität wechseln.
-
Wenn Einschränkungen für die Nutzererfahrung im Auto gelten (z. B. wenn sich das Auto bewegt), sollte diese Aufforderung deaktiviert werden, da die Einstellungen nicht für die fahreroptimierte Benutzeroberfläche gedacht sind.
Fehlerbehandlung und erforderliche Anmeldung
Medien interagieren über die Android Media Session API mit Medien-Apps. Im Rahmen dieser API erhält „Media“ ein PlaybackState
-Objekt, das den aktuellen Status der Medien-App angibt.
Der Anmeldevorgang beginnt, wenn die Medien-App von PlaybackState
zu STATE_ERROR
wechselt, einschließlich eines bestimmten Fehlercodes (siehe Details unten). In diesem Fall zeigt Media die Fehlerbeschreibung und eine Option zum Aufrufen einer Anmeldeaktivität an, die von der Medien-App implementiert wurde.
Dieser Ablauf kann auch von Apps verwendet werden, um andere Fehlersituationen zu signalisieren, z. B. einen Serververbindungsfehler.
Abbildung 4: Fehlerbehandlung
Im Rahmen der normalen PlaybackState
-Fehlerbehandlung muss Media nach der folgenden Eingabe suchen.
-
PlaybackState
-Fehlercode ist gleichPlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED
. Dies bedeutet, dass für die weitere Nutzung der Medien-App eine Anmeldung erforderlich ist. Es können auch andere Fehlercodes empfangen werden, die auf andere Arten von Fehlern hinweisen. -
Die
PlaybackState
-Fehlermeldung (von Medien-Apps mit der MethodePlaybackStateCompat.Builder#setErrorMessage
festgelegt) enthält eine für Menschen lesbare Erklärung, z. B. „Sie sind nicht angemeldet“. Diese Meldung muss dem Nutzer angezeigt werden und für die Ablenkung beim Autofahren optimiert sein. -
Optional kann
PlaybackState
die folgenden Extras (von Medien-Apps mit der MethodePlaybackStateCompat.Builder#setExtras
festgelegt) mit den folgenden Schlüsseln enthalten.-
android.media.extras.ERROR_RESOLUTION_ACTION_LABEL
: Legen Sie einen String fest, der die visuell lesbare Nachricht enthält, die auf der Schaltfläche angezeigt werden soll, die der Nutzer antippt, um den Anmeldevorgang zu starten. -
android.media.extras.ERROR_RESOLUTION_ACTION_INTENT
: Wird mit einerPendingIntent
festgelegt, um ausgelöst zu werden, wenn der Nutzer auf die oben genannte Schaltfläche klickt. DiesePendingIntent
bezieht sich auf eine benutzerdefinierte Anmeldeaktivität, die von derselben Medien-App implementiert wurde.
-
-
Der Status von
PlaybackState
istSTATE_ERROR
. Dies bedeutet, dass bis zur Anmeldung keine anderen Vorgänge möglich sind.