Android Automotive OS-Unterstützung zu deiner Medien-App hinzufügen

Mit Android Automotive OS können Nutzer Apps in ihrem Auto installieren. Damit Sie Nutzer über diese Plattform erreichen können, müssen Sie eine für Autofahrer optimierte App anbieten, die mit Android Automotive OS kompatibel ist. Sie können fast allen Code und alle Ressourcen Ihrer bestehenden Android Auto-App verwenden. Sie müssen jedoch einen separaten Build erstellen, der die Anforderungen auf dieser Seite erfüllt.

Entwicklung – Übersicht

Die Android Automotive OS-Unterstützung lässt sich in wenigen Schritten hinzufügen, wie in den folgenden Abschnitten beschrieben:

  1. Automobilfunktionen in Android Studio aktivieren
  2. Erstellen Sie ein Modul für die Automobilbranche.
  3. Aktualisieren Sie Ihre Gradle-Abhängigkeiten.
  4. Optional: Einstellungen und Anmeldeaktivitäten implementieren
  5. Optional: Hinweise zum Mediahost lesen

Designaspekte

Android Automotive OS kümmert sich um das Layout der Medieninhalte, die vom Medienbrowserdienst Ihrer App empfangen werden. Das bedeutet, dass Ihre App die Benutzeroberfläche nicht anzeigt und keine Ihrer Aktivitäten startet, wenn ein Nutzer die Medienwiedergabe auslöst.

Wenn Sie Einstellungen oder Anmeldeaktivitäten implementieren, müssen diese Aktivitäten für das Fahrzeug optimiert sein. Beachten Sie beim Entwerfen dieser Bereiche Ihrer App die Designrichtlinien für Android Automotive OS.

Projekt einrichten

Sie müssen mehrere Teile des App-Projekts einrichten, um den Support für Android Automotive OS zu aktivieren.

Automotive-Funktionen in Android Studio aktivieren

Verwenden Sie Android Studio 4.0 oder höher, damit alle Automotive OS-Funktionen aktiviert sind.

Automodul erstellen

Für einige Komponenten von Android Automotive OS, z. B. das Manifest, gelten platformspezifische Anforderungen. Erstellen Sie ein Modul, mit dem der Code für diese Komponenten von anderen Code in Ihrem Projekt getrennt werden kann, z. B. vom Code für Ihre Smartphone-App.

So fügen Sie Ihrem Projekt ein Automotive-Modul hinzu:

  1. Klicken Sie in Android Studio auf File > New > New Module.
  2. Wählen Sie Automotive Module (Automobilmodul) aus und klicken Sie auf Weiter.
  3. Geben Sie einen Namen für die Anwendung/Bibliothek ein. Das ist der Name, den Nutzer für Ihre App unter Android Automotive OS sehen.
  4. Geben Sie einen Modulnamen ein.
  5. Passen Sie den Paketnamen an Ihre App an.
  6. Wählen Sie API 28: Android 9.0 (Pie) für das Minimum SDK aus und klicken Sie dann auf Weiter.

    Alle Autos, die Android Automotive OS unterstützen, verwenden Android 9 (API-Ebene 28) oder höher. Wenn Sie diesen Wert auswählen, wird die Ausrichtung auf alle kompatiblen Autos festgelegt.

  7. Wählen Sie Keine Aktivität aus und klicken Sie auf Fertigstellen.

Nachdem Sie Ihr Modul in Android Studio erstellt haben, öffnen Sie die AndroidManifest.xml in Ihrem neuen Automotive-Modul:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

</manifest>

Das Element application enthält einige Standard-App-Informationen sowie ein Element uses-feature, das die Unterstützung für Android Automotive OS deklariert. Beachten Sie, dass im Manifest keine Aktivitäten deklariert sind.

Wenn Sie Einstellungen oder Anmeldeaktivitäten implementieren, fügen Sie sie hier hinzu. Diese Aktivitäten werden vom System mithilfe expliziter Intents ausgelöst und sind die einzigen Aktivitäten, die Sie im Manifest für Ihre Android Automotive OS-App deklarieren.

Nachdem Sie Einstellungen oder Anmeldeaktivitäten hinzugefügt haben, vervollständigen Sie die Manifestdatei, indem Sie das android:appCategory="audio"-Attribut im application-Element festlegen und die folgenden uses-feature-Elemente hinzufügen:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:appCategory="audio"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

    <uses-feature
        android:name="android.hardware.wifi"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.portrait"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.landscape"
        android:required="false" />

</manifest>

Wenn Sie diese Funktionen explizit auf required="false" festlegen, wird verhindert, dass Ihre App mit verfügbaren Hardwarefunktionen auf Automotive OS-Geräten in Konflikt gerät.

Medienunterstützung für Android Automotive OS deklarieren

Verwenden Sie den folgenden Manifesteintrag, um anzugeben, dass Ihre App Android Automotive OS unterstützt:

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

Dieser Manifesteintrag bezieht sich auf eine XML-Datei, in der die von Ihrer App unterstützten Funktionen für die Automobilbranche deklariert werden.

Wenn Sie angeben möchten, dass es sich um eine Medien-App handelt, fügen Sie dem Verzeichnis res/xml/ in Ihrem Projekt eine XML-Datei mit dem Namen automotive_app_desc.xml hinzu. Fügen Sie dieser Datei Folgendes hinzu:

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

Intent-Filter

Android Automotive OS verwendet explizite Intents, um Aktivitäten in Ihrer Medien-App auszulösen. Fügen Sie der Manifestdatei keine Aktivitäten mit Intent-Filtern vom Typ CATEGORY_LAUNCHER oder ACTION_MAIN hinzu.

Aktivitäten wie die im folgenden Beispiel sind in der Regel auf ein Smartphone oder ein anderes Mobilgerät ausgerichtet. Deklarieren Sie diese Aktivitäten im Modul, in dem die Smartphone-App erstellt wird, nicht im Modul, in dem Ihre Android Automotive OS-App erstellt wird.

<activity android:name=".MyActivity">
    <intent-filter>
        <!-- You can't use either of these intents for Android Automotive OS -->
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <!--
        In their place, you can include other intent filters for any activities
        that your app needs for Android Automotive OS, such as settings or
        sign-in activities.
        -->
    </intent-filter>
</activity>

Gradle-Abhängigkeiten aktualisieren

Wir empfehlen, den Media-Browser-Dienst in einem separaten Modul zu platzieren, das Sie für Ihre Smartphone-App und Ihr Automodul gemeinsam verwenden. Wenn Sie diesen Ansatz verwenden, müssen Sie Ihr Automotive-Modul so aktualisieren, dass es das freigegebene Modul enthält, wie im folgenden Snippet gezeigt:

my-auto-module/build.gradle

Groovy

buildscript {
    ...
    dependencies {
        ...
        implementation project(':shared_module_name')
    }
}

Kotlin

buildscript {
    ...
    dependencies {
        ...
        implementation(project(":shared_module_name"))
    }
}

Einstellungen und Anmeldeaktivitäten implementieren

Zusätzlich zu Ihrem Medienbrowserdienst können Sie auch für Ihr Auto optimierte Einstellungen und Anmeldeaktivitäten für Ihre Android Automotive OS-App bereitstellen. Mit diesen Aktivitäten können Sie App-Funktionen bereitstellen, die nicht in den Android Media APIs enthalten sind.

Implementieren Sie diese Aktivitäten nur, wenn Nutzer sich in Ihrer Android Automotive OS-App anmelden oder App-Einstellungen festlegen müssen. Diese Aktivitäten werden von Android Auto nicht verwendet.

Aktivitätsworkflows

Das folgende Diagramm zeigt, wie ein Nutzer mit Ihren Einstellungen und Anmeldeaktivitäten unter Android Automotive OS interagiert:

Workflows für Einstellungen und Anmeldeaktivitäten

Abbildung 1: Workflows für Einstellungen und Anmeldeaktivitäten

Ablenkungen in den Einstellungen und Anmeldeaktivitäten vermeiden

Damit Ihre Einstellungen und/oder Anmeldeaktivitäten nur verwendet werden können, wenn das Fahrzeug des Nutzers geparkt ist, prüfen Sie, ob die <activity>-Elemente das folgende <meta-data>-Element enthalten. Ihre App wird bei der Überprüfung abgelehnt, wenn ein solches Element vorhanden ist.

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

Einstellungsaktivität hinzufügen

Sie können eine für Fahrzeuge optimierte Einstellungsaktivität hinzufügen, damit Nutzer die Einstellungen für Ihre App in ihrem Auto konfigurieren können. Ihre Einstellungen können auch andere Workflows umfassen, z. B. die Anmeldung oder Abmeldung in einem Nutzerkonto oder das Wechseln zwischen Nutzerkonten. Denken Sie daran, dass diese Aktivität nur von einer App ausgelöst wird, die auf Android Automotive OS ausgeführt wird. Smartphone-Apps, die mit Android Auto verbunden sind, nutzen sie nicht.

Einstellungenaktivität deklarieren

Sie müssen die Einstellungen in der Manifestdatei Ihrer App deklarieren, wie im folgenden Code-Snippet gezeigt:

<application>
    ...
    <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>
    ...
</application>

Aktivitätseinstellungen implementieren

Wenn ein Nutzer Ihre App startet, erkennt Android Automotive OS die von Ihnen deklarierte Einstellungsaktivität und zeigt eine Aufforderung wie ein Symbol an. Der Nutzer kann auf das Symbol tippen oder es über das Display des Autos auswählen, um zur Aktivität zu gelangen. Android Automotive OS sendet die Intent ACTION_APPLICATION_PREFERENCES, die Ihre App auffordert, die Einstellungen zu starten.

Im Rest dieses Abschnitts wird gezeigt, wie Sie Code aus der Beispiel-App „Universal Android Music Player“ (UAMP) anpassen, um eine Einstellungsaktivität für Ihre App zu implementieren.

Laden Sie zuerst den Beispielcode herunter:

# Clone the UAMP repository
git clone https://github.com/android/uamp.git

# Fetch the appropriate pull request to your local repository
git fetch origin pull/323/head:NEW_LOCAL_BRANCH_NAME

# Switch to the new branch
git checkout NEW_LOCAL_BRANCH_NAME

So implementieren Sie Ihre Aktivität:

  1. Kopieren Sie den Ordner automotive/automotive-lib in Ihr Automotive-Modul.
  2. Definieren Sie einen Einstellungsbaum wie in automotive/src/main/res/xml/preferences.xml.
  3. Implementieren Sie einen PreferenceFragmentCompat, in dem Ihre Einstellungen angezeigt werden. Weitere Informationen finden Sie in den Dateien SettingsFragment.kt und SettingsActivity.kt in UAMP sowie im Leitfaden zu den Android-Einstellungen.

Beachten Sie bei der Implementierung Ihrer Einstellungen die folgenden Best Practices für die Verwendung einiger Komponenten in der Einstellungsbibliothek:

  • Die Einstellungen dürfen unterhalb der Hauptansicht nicht mehr als zwei Ebenen haben.
  • Verwenden Sie keine DropDownPreference. Verwenden Sie stattdessen ein ListPreference.
  • Organisationskomponenten:
    • PreferenceScreen
      • Dies muss die oberste Ebene des Einstellungsbaums sein.
    • PreferenceCategory
      • Wird verwendet, um Preference-Objekte zu gruppieren.
      • Fügen Sie eine title hinzu.
  • Fügen Sie allen folgenden Komponenten key und title hinzu. Sie können auch einen summary, einen icon oder beides angeben:
    • Preference
      • Passen Sie die Logik im onPreferenceTreeClick()-Callback Ihrer PreferenceFragmentCompat-Implementierung an.
    • CheckBoxPreference
      • Für bedingten Text kann summaryOn oder summaryOff anstelle von summary verwendet werden.
    • SwitchPreference
      • Für bedingten Text kann summaryOn oder summaryOff anstelle von summary verwendet werden.
      • Kann switchTextOn oder switchTextOff sein.
    • SeekBarPreference
      • Fügen Sie min, max und defaultValue hinzu.
    • EditTextPreference
      • Fügen Sie dialogTitle, positiveButtonText und negativeButtonText hinzu.
      • Kann dialogMessage und/oder dialogLayoutResource haben.
    • com.example.android.uamp.automotive.lib.ListPreference
      • Stammt hauptsächlich von ListPreference.
      • Wird verwendet, um eine Liste mit Preference-Objekten zur Einzelauswahl anzuzeigen.
      • Muss ein Array von entries und entsprechenden entryValues haben.
    • com.example.android.uamp.automotive.lib.MultiSelectListPreference
      • Stammt hauptsächlich aus MultiSelectListPreference
      • Wird verwendet, um eine Multiple-Choice-Liste von Preference-Objekten anzuzeigen.
      • Muss ein Array von entries und entsprechenden entryValues haben.

Anmeldeaktivität hinzufügen

Wenn sich Nutzer in Ihrer App anmelden müssen, bevor sie sie verwenden können, können Sie eine für Fahrzeuge optimierte Anmeldeaktivität hinzufügen, die die Anmeldung und Abmeldung in Ihrer App verwaltet. Sie können auch einer Aktivität für Einstellungen Anmelde- und Abmeldeabläufe hinzufügen. Verwenden Sie jedoch eine spezielle Anmeldeaktivität, wenn Ihre App erst verwendet werden kann, wenn sich ein Nutzer anmeldet. Diese Aktivität wird nur von einer App ausgelöst, die unter Android Automotive OS ausgeführt wird. Smartphone-Apps, die mit Android Auto verbunden sind, nutzen sie nicht.

Anmeldung beim Start der App erforderlich machen

Wenn sich ein Nutzer anmelden muss, bevor er Ihre App verwenden kann, muss Ihr Medienbrowserdienst Folgendes tun:

  1. Sende in der onLoadChildren()-Methode deines Dienstes das null-Ergebnis mit der Methode sendResult().
  2. Lege mit der Methode setState() den Wert STATE_ERROR für PlaybackStateCompat der Mediensitzung fest. Dadurch wird Android Automotive OS mitgeteilt, dass bis zur Behebung des Fehlers keine weiteren Vorgänge ausgeführt werden können.
  3. Lege den PlaybackStateCompat-Fehlercode der Mediensitzung auf ERROR_CODE_AUTHENTICATION_EXPIRED fest. Dadurch wird Android Automotive OS mitgeteilt, dass sich der Nutzer authentifizieren muss.
  4. Lege die PlaybackStateCompat-Fehlermeldung der Mediensitzung mit der Methode setErrorMessage() fest. Da diese Fehlermeldung an den Nutzer gerichtet ist, muss sie für die aktuelle Sprache des Nutzers lokalisiert werden.
  5. Lege die PlaybackStateCompat-Extras der Mediensitzung mit der Methode setExtras() fest. Fügen Sie die folgenden beiden Schlüssel hinzu:

Im folgenden Code-Snippet wird gezeigt, wie Sie in Ihrer App festlegen können, dass sich Nutzer anmelden müssen, bevor sie die App verwenden können:

Kotlin

import androidx.media.utils.MediaConstants

val signInIntent = Intent(this, SignInActivity::class.java)
val signInActivityPendingIntent = PendingIntent.getActivity(this, 0,
    signInIntent, 0)
val extras = Bundle().apply {
    putString(
        MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL,
        "Sign in"
    )
    putParcelable(
        MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT,
        signInActivityPendingIntent
    )
}

val playbackState = PlaybackStateCompat.Builder()
        .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f)
        .setErrorMessage(
            PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED,
            "Authentication required"
        )
        .setExtras(extras)
        .build()
mediaSession.setPlaybackState(playbackState)

Java

import androidx.media.utils.MediaConstants;

Intent signInIntent = new Intent(this, SignInActivity.class);
PendingIntent signInActivityPendingIntent = PendingIntent.getActivity(this, 0,
    signInIntent, 0);
Bundle extras = new Bundle();
extras.putString(
    MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL,
    "Sign in");
extras.putParcelable(
    MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT,
    signInActivityPendingIntent);

PlaybackStateCompat playbackState = new PlaybackStateCompat.Builder()
    .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f)
    .setErrorMessage(
            PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED,
            "Authentication required"
    )
    .setExtras(extras)
    .build();
mediaSession.setPlaybackState(playbackState);

Nachdem der Nutzer erfolgreich authentifiziert wurde, setzen Sie PlaybackStateCompat auf einen anderen Status als STATE_ERROR zurück und leiten Sie den Nutzer dann zurück zu Android Automotive OS, indem Sie die Methode finish() der Aktivität aufrufen.

Anmeldeaktivitäten implementieren

Google bietet eine Vielzahl von Identitätstools, mit denen Sie Nutzern die Anmeldung in Ihrer App in ihrem Auto erleichtern können. Einige Tools wie Firebase Authentication bieten Full-Stack-Toolkits, mit denen Sie benutzerdefinierte Authentifizierungsfunktionen erstellen können. Andere Tools nutzen die vorhandenen Anmeldedaten eines Nutzers oder andere Technologien, um eine nahtlose Anmeldung für Nutzer zu ermöglichen.

Mit den folgenden Tools können Sie die Anmeldung für Nutzer vereinfachen, die sich zuvor auf einem anderen Gerät angemeldet haben:

  • Anmeldung/Registrierung über One Tap:Wenn Sie One Tap bereits für andere Geräte wie Ihre Smartphone-App implementiert haben, implementieren Sie es auch für Ihre Android Automotive OS-App, um bestehende One Tap-Nutzer zu unterstützen.
  • Google Log-in:Wenn Sie Google Log-in bereits für andere Geräte wie Ihre Smartphone-App implementiert haben, implementieren Sie Google Log-in auch für Ihre Android Automotive OS-App, um bestehende Google Log-in-Nutzer zu unterstützen.
  • Autofill mit Google:Wenn Nutzer „Autofill mit Google“ auf ihren anderen Android-Geräten aktiviert haben, werden ihre Anmeldedaten im Google Passwortmanager gespeichert. Wenn sich diese Nutzer in Ihrer Android Automotive OS-App anmelden, werden mit „Automatisches Ausfüllen“ relevante gespeicherte Anmeldedaten vorgeschlagen. Für die Verwendung von Autofill mit Google ist keine Anwendungsentwicklung erforderlich. App-Entwickler können jedoch ihre Apps für bessere Ergebnisse optimieren. Das Autofill-System von Google wird auf allen Geräten mit Android 8.0 (API-Level 26) oder höher unterstützt, einschließlich Android Automotive OS.

AccountManager verwenden

Android Automotive OS-Apps mit Authentifizierung müssen aus den folgenden Gründen AccountManager verwenden:

  • Verbesserte Nutzerfreundlichkeit und einfachere Kontoverwaltung:Nutzer können alle ihre Konten über das Kontomenü in den Systemeinstellungen ganz einfach verwalten, einschließlich Anmeldung und Abmeldung.
  • Gastfunktionen:Autos sind gemeinsam genutzte Geräte. OEMs können also Gastfunktionen im Fahrzeug aktivieren, bei denen keine Konten hinzugefügt werden können. Diese Einschränkung wird durch die Verwendung von DISALLOW_MODIFY_ACCOUNTS für AccountManager erreicht.

Berechtigungen

Wenn Sie vom Nutzer Berechtigungen anfordern müssen, verwenden Sie denselben Ablauf wie bei der Authentifizierungsaktivität oder der Einstellungen-Aktivität im Diagramm zu Aktivitätsabläufen in einem vorherigen Abschnitt.

Hinweise zum Medienhost lesen

Je nach Systemanwendung (einschließlich ihrer Version), die eine Verbindung zu Ihrem Medienbrowserdienst herstellt, erhält Ihre Anwendung möglicherweise die folgenden zusätzlichen Funktionen:

Fehlerbehandlung

Fehler in Medien-Apps unter Android Automotive OS werden über die PlaybackStateCompat der Mediensitzung mitgeteilt. Legen Sie für alle Fehler einen geeigneten Fehlercode und eine Fehlermeldung in der PlaybackStateCompat fest. Dadurch wird in der Benutzeroberfläche ein Toast angezeigt.

Wenn ein Fehler auftritt, die Wiedergabe aber fortgesetzt werden kann, schlage einen nicht schwerwiegenden Fehler vor. So kann ein Nutzer beispielsweise Musik in einer App abspielen, bevor er sich anmeldet, sich aber erst anmelden müssen, um einen Titel zu überspringen. Wenn du einen nicht fatalen Fehler verwendest, kann das System dem Nutzer vorschlagen, sich anzumelden, ohne die Wiedergabe des aktuellen Medienelements zu unterbrechen.

Wenn Sie einen nicht schwerwiegenden Fehler ausgeben, belassen Sie den Rest der PlaybackStateCompat unverändert, mit Ausnahme des Fehlercodes und der Fehlermeldung. So kann die Wiedergabe des aktuellen Medienelements fortgesetzt werden, während der Nutzer entscheidet, ob er sich anmelden möchte.

Wenn die Wiedergabe nicht möglich ist, z. B. wenn keine Internetverbindung und keine Offlineinhalte verfügbar sind, setze den Status von PlaybackStateCompat auf STATE_ERROR.

Löschen Sie bei nachfolgenden Aktualisierungen Ihrer PlaybackStateCompat alle Fehlercodes und Fehlermeldungen, um zu vermeiden, dass mehrere Warnungen für denselben Fehler angezeigt werden.

Wenn Sie einen Navigationsbaum nicht laden können, z. B. wenn eine Authentifizierung erforderlich ist und der Nutzer nicht angemeldet ist, senden Sie einen leeren Navigationsbaum. Gib dazu für den Stammknoten des Medienelements ein Nullergebnis von onLoadChildren() zurück. In diesem Fall wird auf dem System ein Vollbildfehler mit der in der PlaybackStateCompat festgelegten Fehlermeldung angezeigt.

Umsetzbare Fehler

Wenn ein Fehler behoben werden kann, legen Sie zusätzlich die folgenden beiden Extras in PlaybackStateCompat fest:

Fehler, die behoben werden können, werden als Dialog angezeigt und können nur von Nutzern behoben werden, wenn das Auto angehalten ist.

Fehlerfälle testen

Prüfen Sie, ob Ihre App Fehler in allen Szenarien ordnungsgemäß verarbeitet, einschließlich:

  • Verschiedene Stufen Ihres Produkts, z. B. kostenlos oder Premium oder angemeldet oder abgemeldet
  • Unterschiedliche Status des Antriebs, z. B. „Geparkt“ oder „In Bewegung“
  • Verschiedene Verbindungsstatus, z. B. online oder offline

Weitere Überlegungen

Beachten Sie bei der Entwicklung Ihrer Android Automotive OS-App außerdem Folgendes:

Offlineinhalte

Implementieren Sie gegebenenfalls die Unterstützung für die Offlinewiedergabe. Autos mit Android Automotive OS haben voraussichtlich eine eigene Datenverbindung. Das bedeutet, dass ein Datentarif in den Kosten des Fahrzeugs enthalten ist oder vom Nutzer bezahlt wird. Autos sollen jedoch auch eine variablere Konnektivität als Mobilgeräte haben.

Folgende Punkte sollten Sie bei der Offline-Supportstrategie beachten:

  • Inhalte sollten am besten heruntergeladen werden, während Ihre App verwendet wird.
  • Gehen Sie nicht davon aus, dass WLAN verfügbar ist. Ein Auto befindet sich möglicherweise nie in Reichweite eines WLANs oder der OEM hat das WLAN zugunsten eines Mobilfunknetzes deaktiviert.
  • Es ist zwar in Ordnung, die Inhalte, die Nutzer voraussichtlich verwenden werden, intelligent im Cache zu speichern, wir empfehlen jedoch, dass Nutzer dieses Verhalten über die Einstellungen ändern können.
  • Der Speicherplatz in Autos variiert. Bieten Sie Nutzern daher eine Möglichkeit, Offlineinhalte zu löschen, z. B. über eine Option in den Einstellungen.

WebView-Unterstützung

WebViews werden in Android Automotive OS unterstützt, sind aber nur für Ihre Einstellungen und Anmeldeaktivitäten zulässig. Aktivitäten, für die eine WebView verwendet wird, müssen außerhalb der WebView eine Option zum Schließen oder Zurückgehen haben.

Hier einige Beispiele für zulässige Anwendungsfälle für WebViews:

  • Die Anzeige Ihrer Datenschutzerklärung, Nutzungsbedingungen oder anderer rechtlicher Links in Ihren Einstellungen
  • Ein webbasierter Ablauf bei der Anmeldung.

Wenn Sie eine WebView verwenden, können Sie JavaScript aktivieren.

WebView schützen

Treffen Sie alle möglichen Vorkehrungen, damit Ihre WebView nicht als Eingangspunkt in das Internet dient. Im folgenden Code-Snippet wird gezeigt, wie Sie die WebView auf die URL sperren, die im loadUrl()-Aufruf verwendet wird, und Weiterleitungen verhindern. Wir empfehlen Ihnen dringend, solche Sicherheitsvorkehrungen nach Möglichkeit zu implementieren, z. B. wenn Sie rechtlich relevante Links anzeigen.

Kotlin

override fun shouldOverrideUrlLoading(webView: WebView,
                             webResourceRequest: WebResourceRequest): Boolean {
  val originalUri: Uri = Uri.parse(webView.originalUrl)
  // Check for allowed URLs
  if (originalUri.equals(Uri.parse(BLANK_URL))
      || originalUri.equals(webResourceRequest.url)) {
    return false
  }
  if (webResourceRequest.isRedirect) {
    logger.w("Redirect detected, not following")
    return true
  }
  setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.url)
  logger.w(
    String.format(
      "Navigation prevented to %s original is %s", webResourceRequest.url, originalUri))
  return true
}

Java

@Override
public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) {
  Uri originalUri = Uri.parse(webView.getOriginalUrl());
  // Check for allowed URLs
  if (originalUri.equals(Uri.parse(BLANK_URL))
      || originalUri.equals(webResourceRequest.getUrl())) {
    return false;
  }
  if (webResourceRequest.isRedirect()) {
    logger.w("Redirect detected, not following");
    return true;
  }
  setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.getUrl());
  logger.w(
      String.format(
          "Navigation prevented to %s original is %s", webResourceRequest.getUrl(), originalUri));
  return true;
}

Paketnamen

Da Sie ein separates Android Package Kit (APK) für Android Automotive OS bereitstellen, können Sie den Paketnamen aus Ihrer mobilen App wiederverwenden oder einen neuen Paketnamen erstellen. Wenn Sie einen anderen Paketnamen verwenden, hat Ihre App zwei separate Play Store-Einträge. Wenn Sie Ihren aktuellen Paketnamen wiederverwenden, hat Ihre App auf beiden Plattformen einen einzigen Eintrag.

Das ist in erster Linie eine geschäftliche Entscheidung. Wenn beispielsweise ein Team an der mobilen App und ein anderes an der Android Automotive OS-App arbeitet, kann es sinnvoll sein, separate Paketnamen zu verwenden und jedes Team seinen eigenen Play Store-Eintrag verwalten zu lassen. Der technische Aufwand für die beiden Ansätze ist nicht sehr unterschiedlich.

In der folgenden Tabelle sind einige weitere wichtige Unterschiede zwischen dem Beibehalten des aktuellen Paketnamens und der Verwendung eines neuen Paketnamens zusammengefasst:

Funktion Gleicher Paketname Neuer Paketname
Store-Eintrag Single Mehrere
Gespiegelte Installation Ja: „Schnelle App-Wiederinstallation“ während des Einrichtungsassistenten Nein
Play Store-Überprüfungsprozess Blockierung von Überprüfungen: Wenn die Überprüfung für ein APK fehlschlägt, werden auch andere APKs blockiert, die im selben Release eingereicht wurden. Individuelle Rezensionen
Statistiken, Messwerte und Vitaldaten Kombiniert: Sie können nach datenfiltern, die speziell für die Automobilbranche relevant sind. Aufheben
Indexierung und Suchrang Auf dem aktuellen Stand aufbauen Kein Übertrag
Einbindung in andere Apps Höchstwahrscheinlich sind keine Änderungen erforderlich, vorausgesetzt, der Mediencode wird von beiden APKs gemeinsam verwendet. Möglicherweise müssen Sie die entsprechende App aktualisieren, z. B. für die URI-Wiedergabe mit Google Assistant.

Häufig gestellte Fragen

In den folgenden Abschnitten finden Sie Antworten auf einige häufig gestellte Fragen zu Android Automotive OS.

Hardware

Kann meine App auf das Mikrofon zugreifen?

Für Apps, die auf Android 10 (API-Level 29) oder höher ausgerichtet sind, lesen Sie die Dokumentation zum Teilen von Audioeingabe. Das ist vor API-Level 29 nicht möglich.

Auf welche Auto-APIs können wir zugreifen und wie?

Sie sind auf die APIs beschränkt, die vom OEM freigegeben werden. Es werden Prozesse entwickelt, um den Zugriff auf diese APIs zu standardisieren.

Apps können über SetProperty() und GetProperty() in CarPropertyManager auf Auto-APIs zugreifen. Eine Liste aller verfügbaren Properties finden Sie im Quellcode oder in der Referenzdokumentation. Wenn die Property mit @SystemApi annotiert ist, ist sie auf vorinstallierte System-Apps beschränkt.

Welche Audio-Codecs werden unterstützt?

Weitere Informationen finden Sie in der Android-CDD unter Audio-Codec-Details.

Wird Widevine DRM unterstützt?

Ja. Widevine DRM wird unterstützt.

Entwicklung und Tests

Gibt es Einschränkungen oder Empfehlungen für die Verwendung von SDKs und Bibliotheken von Drittanbietern?

Wir haben keine spezifischen Richtlinien für die Verwendung von SDKs und Bibliotheken von Drittanbietern. Wenn Sie SDKs und Bibliotheken von Drittanbietern verwenden, sind Sie dennoch für die Einhaltung aller Qualitätsanforderungen für Auto-Apps verantwortlich.

Kann ich einen Dienst im Vordergrund verwenden?

Der einzige zulässige Anwendungsfall für einen Dienst im Vordergrund ist das Herunterladen von Inhalten zur Offlinenutzung. Wenn Sie einen anderen Anwendungsfall für einen Dienst im Vordergrund haben, für den Sie Unterstützung benötigen, wenden Sie sich über die Android Automotive OS-Diskussionsgruppe an uns.

Android Automotive OS-Apps veröffentlichen

Wie veröffentliche ich meine Android Automotive OS-App über die Google Play Console?

Weitere Informationen zur Veröffentlichung Ihrer Android Automotive OS-App über die Google Play Console finden Sie unter Über Autos vertreiben.

Weitere Informationen

Weitere Informationen zu Android Automotive OS finden Sie in den folgenden zusätzlichen Ressourcen.

Produktproben

Leitfäden

Blogs

Videos

Medienproblem mit Android Automotive OS melden

Wenn bei der Entwicklung Ihrer Medien-App für Android Automotive OS ein Problem auftritt, können Sie es über den Google Issue Tracker melden. Achten Sie darauf, in der Vorlage für Probleme alle angeforderten Informationen anzugeben.

Neues Problem erstellen

Bevor Sie ein neues Problem melden, prüfen Sie, ob es bereits in der Liste der Probleme aufgeführt ist. Sie können Probleme abonnieren und dafür stimmen, indem Sie im Tracker auf den Stern für ein Problem klicken. Weitere Informationen finden Sie unter Probleme abonnieren.