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

Mit Android Automotive OS können Nutzer Apps in ihrem Auto installieren. Um Nutzer dieser Plattform nutzen, müssen Sie eine für Autofahrer optimierte App anbieten, die kompatibel mit Android Automotive OS. Sie können fast den gesamten Code wiederverwenden und in Ihrer Android Auto-App, aber Sie müssen einen separaten Build erstellen, 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. Aktiviere Funktionen der Automobilbranche in Android Studio.
  2. Automobilmodul erstellen
  3. Aktualisiere deine Gradle-Abhängigkeiten.
  4. Optional können Sie Einstellungen und Anmeldeaktivitäten implementieren.
  5. Optional können Sie die Option Hinweise auf Medienhost lesen aufrufen.

Designaspekte

Android Automotive OS kümmert sich um das Layout der Medieninhalte, vom Medienbrowserdienst Ihrer App empfangen. Das bedeutet, dass Ihre App die Benutzeroberfläche nicht zeichnet und keine Ihre Aktivitäten, 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. Weitere Informationen finden Sie in den Designrichtlinien. für Android Automotive OS erstellen, während Sie diese Bereiche Ihrer App entwerfen.

Projekt einrichten

Sie müssen mehrere Teile Ihres App-Projekts einrichten, um Android Automotive OS unterstützt.

Automotive-Funktionen in Android Studio aktivieren

Verwende Android Studio 4.0 oder höher, um sicherzustellen, dass alle Automotive OS-Funktionen aktiviert.

Automobilmodul erstellen

Einige Komponenten von Android Automotive OS, wie das Manifest, haben plattformspezifischen Anforderungen. Erstellen Sie ein Modul, das die für diese Komponenten getrennt von anderem Code in Ihrem Projekt, wie z. B. der für Ihre Telefon-App verwendet wird.

So fügen Sie Ihrem Projekt ein Automobilmodul hinzu:

  1. Klicken Sie in Android Studio auf File > Neu > Neues Modul.
  2. Wählen Sie Automotive Module aus und klicken Sie auf Next.
  3. Geben Sie einen Anwendungs-/Bibliotheksnamen ein. Dies ist der Name, den Nutzer für für Android Automotive OS optimieren.
  4. Geben Sie einen Modulnamen ein.
  5. Passen Sie den Paketnamen an den Namen Ihrer App an.
  6. Wählen Sie als Minimum SDK die Option API 28: Android 9.0 (Pie) aus und klicken Sie dann auf Weiter.

    Alle Autos, die Android Automotive OS unterstützen, laufen unter Android 9 (API-Level 28) oder Wenn Sie diesen Wert auswählen, wird also eine Ausrichtung auf alle kompatiblen Fahrzeugen.

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

Nachdem du das Modul in Android Studio erstellt hast, öffne die AndroidManifest.xml in Ihr neues Automobilmodul:

<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>

Die application enthält Standard-App-Informationen sowie ein uses-feature , das die Unterstützung von Android Automotive OS deklariert. Beachten Sie, dass es keine im Manifest deklarierten Aktivitäten sind.

Wenn Sie Einstellungen oder Anmeldeaktivitäten implementieren, fügen Sie hier einfügen. Diese Aktivitäten werden vom System mit expliziten Intents ausgelöst und sind die einzigen Aktivitäten, die du im Manifest für deine Android Automotive OS-App

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

<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

Erkläre mit dem folgenden Manifesteintrag, dass deine App Android Automotive OS:

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

Dieser Manifesteintrag verweist auf eine XML-Datei, in der das Automotive-Objekt deklariert die Ihre App unterstützt.

Wenn du angeben möchtest, dass du eine Medien-App hast, füge ein XML-Datei mit dem Namen „automotive_app_desc.xml“ in das Verzeichnis res/xml/ in Ihrem Projekt arbeiten. Nehmen Sie Folgendes in diese Datei auf:

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

Intent-Filter

Android Automotive OS verwendet explizite Intents, um Aktivitäten in Ihren Medien auszulösen Nehmen Sie keine Aktivitäten auf, CATEGORY_LAUNCHER oder ACTION_MAIN-Intent Filter in der Manifest-Datei.

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 Medienbrowser beizubehalten. in einem separaten Modul, das Sie zwischen Ihrer Smartphone-App und Ihrem Automobil- -Modul. Wenn Sie diesen Ansatz verwenden, müssen Sie Ihre um das freigegebene Modul einzubeziehen, 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

Neben Ihrem Medienbrowserdienst können Sie auch für Fahrzeuge optimierte Einstellungen und Anmeldeaktivitäten für Ihre Android Automotive OS-App. Mit diesen Aktivitäten können Sie App-Funktionen bereitstellen, die nicht im Android Media APIs

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 sind nicht die von Android Auto verwendet werden.

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. Einstellungen und Workflows für Anmeldeaktivitäten.

Ablenkungen durch Einstellungen und Anmeldeaktivitäten vermeiden

Um sicherzustellen, dass Ihre Einstellungen und/oder Anmeldeaktivitäten nur für die Verwendung verfügbar sind <activity>-Element(e) muss/haben, während das Fahrzeug geparkt ist dürfen das folgende <meta-data>-Element nicht 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"/>

Aktivität zu Einstellungen hinzufügen

Sie können eine Aktivität für Fahrzeugeinstellungen hinzufügen, damit Nutzer deine App in ihrem Auto konfigurieren können. Deine Einstellungen können auch andere Workflows bereitstellen, z. B. die An- oder Abmeldung oder das Nutzerkonto wechseln. Denken Sie daran, dass diese Aktivität die durch eine App mit Android Automotive OS ausgelöst wird. Telefon-Apps verbunden mit und nicht für Android Auto.

Einstellungsaktivität deklarieren

Sie müssen Ihre Einstellungsaktivität in der Manifestdatei Ihrer App deklarieren, wie unter das folgende Code-Snippet:

<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>

Einstellungen implementieren

Wenn ein Nutzer deine App startet, erkennt Android Automotive OS Folgendes: in den Einstellungen, die Sie deklariert haben, und zeigt ein Angebot, z. B. ein Symbol, an. Der Nutzer kann dieses Angebot über das Display seines Autos antippen oder auswählen auf die Aktivität. Android Automotive OS sendet die ACTION_APPLICATION_PREFERENCES die deine App auffordert, deine Einstellungen zu starten.

Im weiteren Verlauf dieses Abschnitts erfahren Sie, wie Sie den Code der universellen UAMP-Beispiel-App (Android Music Player) 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 automotive/src/main/res/xml/preferences.xml
  3. PreferenceFragmentCompat implementieren die in den Einstellungen angezeigt werden. In den SettingsFragment.kt und SettingsActivity.kt-Dateien in UAMP und den Android-Einstellungen finden Sie weitere Informationen.

Berücksichtigen Sie beim Implementieren Ihrer Einstellungsaktivität die folgenden Best Practices für die Verwendung von einige Komponenten der Preference-Bibliothek:

  • Die Einstellungen dürfen unterhalb der Hauptansicht nicht mehr als zwei Ebenen haben.
  • Verwenden Sie keinen DropDownPreference. Verwenden Sie stattdessen einen ListPreference.
  • Organisationskomponenten:
    • PreferenceScreen
      • Dies muss die oberste Ebene Ihrer Einstellungsstruktur sein.
    • PreferenceCategory
      • Wird verwendet, um Preference-Objekte zu gruppieren.
      • Fügen Sie ein title ein.
  • Fügen Sie in alle folgenden Komponenten key und title ein. Sie können auch summary, icon oder beides enthalten:
    • Preference
      • Passe die Logik im onPreferenceTreeClick()-Callback deines PreferenceFragmentCompat-Implementierung.
    • CheckBoxPreference
      • Für bedingten Text kann summaryOn oder summaryOff anstelle von summary verwendet werden.
    • SwitchPreference
      • Kann für bedingten Text summaryOn oder summaryOff anstelle von summary enthalten.
      • Kann switchTextOn oder switchTextOff haben.
    • SeekBarPreference
      • Fügen Sie min, max und defaultValue hinzu.
    • EditTextPreference
      • dialogTitle, positiveButtonText und negativeButtonText einschließen.
      • Kann dialogMessage und/oder dialogLayoutResource haben.
    • com.example.android.uamp.automotive.lib.ListPreference
      • Wird hauptsächlich aus ListPreference abgeleitet.
      • 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
      • Wird hauptsächlich aus MultiSelectListPreference abgeleitet
      • Wird zur Anzeige einer Multiple-Choice-Liste mit Preference-Objekten verwendet.
      • Es muss ein Array von entries und entsprechende entryValues enthalten.

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. Denken Sie daran, dass diese Aktivität nur durch eine App ausgelöst wird, die auf Android Automotive OS Mit Android Auto verbundene Smartphone-Apps verwenden es nicht.

Anmeldung beim Start der App erforderlich

Wenn Sie festlegen möchten, dass sich Nutzer anmelden müssen, bevor sie Ihre App verwenden können, verwenden Sie den Medienbrowser muss der Dienst Folgendes tun:

  1. Senden Sie in der Methode onLoadChildren() Ihres Dienstes ein null-Ergebnis mithilfe des sendResult() .
  2. PlaybackStateCompat für die Mediensitzung festlegen an STATE_ERROR setState() verwenden . Dadurch wird Android Automotive OS mitgeteilt, dass bis zu wurde der Fehler behoben.
  3. PlaybackStateCompat für die Mediensitzung festlegen Fehlercode an ERROR_CODE_AUTHENTICATION_EXPIRED. Dadurch wird Android Automotive OS mitgeteilt, dass sich der Nutzer authentifizieren muss.
  4. PlaybackStateCompat für die Mediensitzung festlegen im setErrorMessage() . Da diese Fehlermeldung an den Nutzer gerichtet ist, lokalisieren Sie sie für die aktuelle Sprache des Nutzers aus.
  5. PlaybackStateCompat für die Mediensitzung festlegen mit der setExtras() . Fügen Sie die folgenden beiden Schlüssel hinzu:

Das folgende Code-Snippet zeigt, wie Nutzer sich in Ihrer App anmelden müssen bevor Sie Ihre App verwenden:

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);

Legen Sie nach der erfolgreichen Authentifizierung des Nutzers die PlaybackStateCompat fest. in einen anderen Zustand als STATE_ERROR, und leitet den Nutzer zurück zu Android Automotive OS, indem er die Methode finish() .

Anmeldeaktivität implementieren

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

Die folgenden Tools erleichtern Ihnen die Anmeldung. für Nutzer, die sich zuvor auf einem anderen Gerät angemeldet haben:

  • Anmeldung und Registrierung mit One Tap:wenn Sie One Tap bereits implementiert haben für andere Geräte, wie etwa die Telefon-App, Android Automotive OS-App zur Unterstützung bestehender One Tap-Nutzer
  • 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 die Funktion „Autofill mit Google“ aktiviert haben anderen Android-Geräten verwenden, werden die Anmeldedaten im Google Passwortmanager gespeichert. Wenn sich diese Nutzer in Ihrer Android Automotive OS App anmelden, Google schlägt relevante gespeicherte Anmeldedaten vor. Die Verwendung von Autofill mit Google erfordert ohne Aufwand bei der Anwendungsentwicklung. Anwendungsentwickler können jedoch ihre Apps optimieren, um bessere Ergebnisse zu erzielen. Autofill mit Google wird von allen Geräten mit Android 8.0 unterstützt. (API-Level 26) oder höher, einschließlich Android Automotive OS.

AccountManager verwenden

Für Android Automotive OS-Apps mit Authentifizierung muss Folgendes verwendet werden: AccountManager, und zwar aus den folgenden Gründen:

  • Bessere Nutzerfreundlichkeit und einfachere Kontoverwaltung:Nutzer können alle Kampagnen problemlos über das Menü „Konten“ in den Systemeinstellungen, einschließlich der Anmeldung und sich abmelden.
  • „Gast“ :Autos sind gemeinsam genutzte Geräte, das heißt, OEMs können „Gast“ in denen keine Konten hinzugefügt werden können. Dieses Die Einschränkung wird mit DISALLOW_MODIFY_ACCOUNTS erreicht für AccountManager.

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 für Medienhosts lesen

Abhängig von der Systemanwendung (einschließlich ihrer Version), die eine Verbindung Medienbrowserdienst verwenden, kann Ihre Anwendung die folgenden Extras erhalten:

Fehlerbehandlung

Fehler in Medien-Apps unter Android Automotive OS werden über die Medien kommuniziert. Sitzung PlaybackStateCompat. Legen Sie für alle Fehler einen entsprechenden Fehler fest. und Fehlermeldung in PlaybackStateCompat. Dadurch erscheint Toast auf der Benutzeroberfläche.

Wenn ein Fehler auftritt, die Wiedergabe aber fortgesetzt werden kann, gib eine nicht schwerwiegende Fehler. So kann ein Nutzer vielleicht Musik in einer App abspielen, bevor er sich anmeldet, muss er sich anmelden, bevor er einen Song überspringen kann. 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. Mit diesem ermöglicht die Wiedergabe des aktuellen Medienelements, während der Nutzer entscheidet, ob er sich anmelden möchte.

Wenn die Wiedergabe nicht möglich ist, z. B. wenn keine Internetverbindung besteht keine Offline-Inhalte vorhanden sind, setzen Sie den Status PlaybackStateCompat auf STATE_ERROR.

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

Wenn Sie einen Suchbaum nicht laden können, z. B. wenn Sie Authentifizierung erforderlich und der Nutzer ist nicht angemeldet – senden Sie ein Feld Baum durchsuchen. Um dies anzugeben, geben Sie ein Null-Ergebnis von onLoadChildren() für dem Root-Media-Knoten. In diesem Fall wird auf dem System ein Vollbildfehler mit der in der PlaybackStateCompat festgelegten Fehlermeldung angezeigt.

Behebbare Fehler

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

Behebbare Fehler werden als Dialog angezeigt und können von Nutzern nur behoben werden, wenn steht das Auto an.

Fehlerfälle testen

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

  • Verschiedene Produktvarianten, z. B. kostenlos oder Premium oder angemeldet im Vergleich zu abgemeldeten
  • Verschiedene Fahrtstatus:z. B. „geparkt“ oder „Fahrt“
  • Verschiedene Verbindungsstatus, z. B. online oder offline

Weitere Überlegungen

Behalte bei der Entwicklung von Android Automotive die folgenden Punkte im Hinterkopf Betriebssystem-App:

Offlineinhalte

Implementieren Sie gegebenenfalls die Unterstützung für die Offlinewiedergabe. Autos mit Android Automotive Betriebssystem muss eine eigene Datenverbindung haben, d. h. Datentarif ist in den Kosten des Fahrzeugs enthalten oder wird vom Nutzer bezahlt. Die Konnektivität von Fahrzeugen ist erwartungsgemäß stärker schwankend als die von Mobiltelefonen. Geräte.

Hier sind ein paar Dinge, die Sie beachten sollten, wenn Sie Ihren Offline-Support in Betracht ziehen Strategie:

  • Der beste Zeitpunkt zum Herunterladen von Inhalten ist, wenn die App verwendet wird.
  • Gehen Sie nicht davon aus, dass WLAN verfügbar ist. Ein Auto kommt vielleicht nie in Reichweite des WLANs, oder der OEM hat 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 auf dem Auto ist unterschiedlich, daher sollten Nutzer die Möglichkeit haben, zum Beispiel über eine Option in Ihrem Einstellungen.

WebView-Unterstützung

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

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

  • Anzeigen Ihrer Datenschutzerklärung, Nutzungsbedingungen oder anderer rechtlicher Links in den Einstellungen.
  • Ein webbasierter Ablauf bei Ihren Anmeldeaktivitäten.

Wenn Sie ein WebView verwenden, können Sie Folgendes aktivieren: JavaScript.

WebView schützen

Treffen Sie alle möglichen Vorkehrungen, um sicherzustellen, dass Ihr WebView kein Einstiegspunkt in das Internet. Im folgenden Code-Snippet sehen Sie eine Beispiel, wie WebView für die im Feld loadUrl() Anrufweiterleitungen und verhindern Weiterleitungen. Wir empfehlen dringend, Absicherungen zu implementieren. wenn möglich, z. B. wenn Sie rechtliche Hinweise.

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 vertreiben, können Sie Paketnamen aus Ihrer mobilen App wiederverwenden oder ein neues Paket erstellen Namen. Wenn Sie einen anderen Paketnamen verwenden, hat Ihre App zwei separate Play Store- Einträge. Wenn du deinen aktuellen Paketnamen wieder verwendest, hat deine App einen einen einzigen Eintrag auf beiden Plattformen erstellen.

Dies ist in erster Linie eine geschäftliche Entscheidung. Wenn Sie z. B. ein Team haben, die mobile App und ein eigenes Team, das an Android Automotive arbeitet Betriebssystem-App verwenden, ist es sinnvoll, separate Paketnamen zu haben und jedes eigenen Play Store-Eintrag verwaltet. Es gibt keinen großen Unterschied bei der technischen Aufwand erfordern, um einen der beiden Ansätze zu verwenden.

In der folgenden Tabelle sind einige weitere wichtige Unterschiede zwischen dem aktuellen Paketnamen und mit einem neuen Paketnamen:

Funktion Gleicher Paketname Neuer Paketname
Store-Eintrag Single Mehrere
Gespiegelte Installation Ja: „Schnelle App-Neuinstallation“ während des Einrichtungsassistenten Nein
Play Store-Überprüfungsprozess Rezensionen blockieren: Wenn die Überprüfung für ein APK oder andere APKs fehlschlägt die im selben Release eingereicht wurden, Einzelne Rezensionen
Statistiken, Messwerte und wichtige Daten Kombiniert: Sie können nach Fahrzeugdaten filtern. Aufheben
Indexierung und Suchranking Auf dem aktuellen Stand aufbauen Keine Übertragung
Integration in andere Apps Höchstwahrscheinlich sind keine Änderungen erforderlich, vorausgesetzt, der Mediencode wird von beiden APKs gemeinsam verwendet Eventuell muss die entsprechende App aktualisiert werden, 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?

Informationen zu Apps, die auf Android 10 (API-Level 29) oder höher ausgerichtet sind, findest du im Artikel zur Freigabe Dokumentation zur Audioeingabe. Dies ist nicht vor API-Level 29 möglich.

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

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

Apps können über SetProperty() auf Auto-APIs zugreifen und GetProperty() in CarPropertyManager 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 den Details zum Audio-Codec. in der Android-CDD.

Wird Widevine DRM unterstützt?

Ja. Digitale Rechteverwaltung von Wivine 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. Auch wenn Sie SDKs und Bibliotheken von Drittanbietern verwenden, zur Erfüllung aller Qualitätsanforderungen an Auto-Apps.

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 es einen anderen Anwendungsfall für einen Dienst im Vordergrund gibt, Wenn Sie Unterstützung benötigen, wenden Sie sich über das Android Automotive OS-Tool Diskussionsgruppe.

Android Automotive OS-Apps veröffentlichen

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

Das App-Veröffentlichungsverfahren ähnelt dem für Smartphone-Apps, Sie verwenden jedoch einen anderen Formfaktor. So aktivieren Sie für Ihre App den Android Automotive OS-Formfaktor:

  1. Öffnen Sie die Play Console.
  2. Wählen Sie Ihre App aus.
  3. Klicke im Menü auf der linken Seite auf Release > Einrichtung > Erweiterte Einstellungen > Formfaktoren:
  4. Klicken Sie auf Formfaktor hinzufügen > Android Automotive OS und folgen Sie dann den in der Play Console.

Weitere Informationen

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

Produktproben

Leitfäden

Blogs

Videos

Problem mit Android Automotive OS Media melden

Wenn bei der Entwicklung Ihrer Medien-App für Android Automotive ein Problem auftritt Betriebssystem ist, können Sie dies mit der Problemverfolgung von Google 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 den Problemen gemeldet wurde Liste. Sie können Themen abonnieren und abstimmen, indem Sie auf den Stern für ein Problem in klicken: den Tracker. Weitere Informationen finden Sie unter Eine Ausgabe abonnieren: