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.

Entwicklungsübersicht

Das Hinzufügen der Unterstützung für Android Automotive OS erfordert nur wenige Schritte, wie beschrieben finden Sie in den folgenden Abschnitten:

  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.

Designüberlegungen

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, Diese Aktivitäten müssen für Fahrzeuge 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 deine App auf Android Automotive OS.
  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 dein 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>

Durch das explizite Festlegen dieser Funktionen auf required="false" wird sichergestellt, Deine App steht nicht in Konflikt mit verfügbaren Hardwarefunktionen in Automotive OS Geräte.

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 in der Manifestdatei.

Aktivitäten wie im folgenden Beispiel zielen in der Regel auf ein Telefon oder einige einem anderen Mobilgerät. Deklarieren Sie diese Aktivitäten im Modul, entwickelt die Smartphone-App, nicht das Modul für Android Automotive OS.

<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

Cool

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

Implementiere diese Aktivitäten nur, wenn deine Android Automotive OS-App Nutzer müssen sich anmelden oder App-Einstellungen festlegen können. Diese Aktivitäten sind nicht die von Android Auto verwendet werden.

Arbeitsabläufe für Aktivitäten

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

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. Deine App wird 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:

  • Maximal zwei Ebenen unterhalb der Hauptansicht Ihre Einstellungen.
  • Verwenden Sie keinen DropDownPreference. Verwenden Sie stattdessen einen ListPreference.
  • Organisationskomponenten: <ph type="x-smartling-placeholder">
      </ph>
    • 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: <ph type="x-smartling-placeholder">
      </ph>
    • Preference
      • Passe die Logik im onPreferenceTreeClick()-Callback deines PreferenceFragmentCompat-Implementierung
    • CheckBoxPreference
      • Kann für bedingten Text summaryOn oder summaryOff anstelle von summary enthalten.
    • 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 zur Anzeige einer Single-Choice-Liste mit Preference-Objekten verwendet.
      • Muss ein Array von entries und eine entsprechende 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.
      • Muss ein Array von entries und eine entsprechende entryValues haben.

Anmeldeaktivität hinzufügen

Wenn sich ein Nutzer bei Ihrer App anmelden muss, bevor er sie verwenden kann, können Sie eine für Fahrzeuge optimierte Anmeldeaktivität, das An- und Abmelden in deiner App übernimmt. Du kannst auch An- und Abmeldemöglichkeiten hinzufügen. von Workflows zu einer Einstellungsaktivität, aber verwenden Sie spezielle Anmeldeaktivität, wenn Ihre App erst verwendet werden kann, wenn ein Nutzer angemeldet sind. Denken Sie daran, dass diese Aktivität nur von einer 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 vorhandene Anmeldedaten eines Nutzers oder andere Technologien, um eine nahtlose Anmeldeerfahrungen für Nutzer.

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 implementiert haben für andere Geräte wie etwa Ihre Telefon-App, implementieren Sie Melde dich in deiner Android Automotive OS-App an, um die bestehende Google-Anmeldung zu unterstützen Nutzenden.
  • 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.

Account Manager 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 Berechtigungen vom Nutzer anfordern müssen, verwenden Sie denselben Ablauf wie bei die Authentifizierungsaktivität oder die Einstellungsaktivität in den Aktivitätsworkflows. Diagramm aus 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 ein nicht schwerwiegendes Problem aus 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 Sie einen nicht schwerwiegenden Fehler verwenden, kann das System dem Nutzer vorschlagen, dass er sich anmeldet, ohne die Wiedergabe für das aktuelle Medienelement.

Wenn Sie einen nicht schwerwiegenden Fehler ausgeben, behalten Sie den Rest des PlaybackStateCompat unverändert, abgesehen vom Fehlercode 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-Medienknoten. In diesem Fall zeigt das System eine Vollbildansicht an, Fehler mit der in PlaybackStateCompat angegebenen Fehlermeldung.

Behebbare Fehler

Wenn ein Fehler behoben werden kann, geben Sie zusätzlich die folgenden beiden Extras im Feld PlaybackStateCompat:

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 Anwendung 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 die Nutzer erwarten, intelligent im Cache zu speichern, sollten Sie dem Nutzer die Möglichkeit geben, Ihre Einstellungen.
  • 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 eine "Schließen" oder „Zurück“ Angebote außerhalb von WebView.

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 Vorgang für deine 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 können sich dabei auf die APIs beschränken, die vom OEM bereitgestellt werden. Prozesse werden entwickelt, um den Zugriff auf diese APIs zu standardisieren.

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

Welche Arten von 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?

Für die Verwendung von SDKs und Bibliotheken von Drittanbietern gibt es keine speziellen Richtlinien. 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 für für die 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?

Die App-Veröffentlichung ähnelt der Veröffentlichung einer Telefon-App. Sie verwenden einen anderen Formfaktor. So aktivieren Sie die Verwendung von Android Automotive in Ihrer App: Betriebssystem-Formfaktor, gehen Sie so vor:

  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 Geben Sie alle erforderlichen Informationen in der Problemvorlage an.

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: