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:
- Aktiviere Funktionen der Automobilbranche in Android Studio.
- Automobilmodul erstellen
- Aktualisiere deine Gradle-Abhängigkeiten.
- Optional können Sie Einstellungen und Anmeldeaktivitäten implementieren.
- 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:
- Klicken Sie in Android Studio auf File > Neu > Neues Modul.
- Wählen Sie Automotive Module aus und klicken Sie auf Next.
- Geben Sie einen Anwendungs-/Bibliotheksnamen ein. Dies ist der Name, den Nutzer für für Android Automotive OS optimieren.
- Geben Sie einen Modulnamen ein.
- Passen Sie den Paketnamen an den Namen Ihrer App an.
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.
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:
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:
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 repositorygit clone https://github.com/android/uamp.git
# Fetch the appropriate pull request to your local repositorygit fetch origin pull/323/head:NEW_LOCAL_BRANCH_NAME
# Switch to the new branchgit checkout NEW_LOCAL_BRANCH_NAME
So implementieren Sie Ihre Aktivität:
- Kopieren Sie den Ordner
automotive/automotive-lib
in Ihr Automotive-Modul. - Definieren Sie einen Einstellungsbaum wie
automotive/src/main/res/xml/preferences.xml
PreferenceFragmentCompat
implementieren die in den Einstellungen angezeigt werden. In denSettingsFragment.kt
undSettingsActivity.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 einenListPreference
. - Organisationskomponenten:
PreferenceScreen
- Dies muss die oberste Ebene Ihrer Einstellungsstruktur sein.
PreferenceCategory
- Wird verwendet, um
Preference
-Objekte zu gruppieren. - Fügen Sie ein
title
ein.
- Wird verwendet, um
- Fügen Sie in alle folgenden Komponenten
key
undtitle
ein. Sie können auchsummary
,icon
oder beides enthalten:Preference
- Passe die Logik im
onPreferenceTreeClick()
-Callback deinesPreferenceFragmentCompat
-Implementierung.
- Passe die Logik im
CheckBoxPreference
- Für bedingten Text kann
summaryOn
odersummaryOff
anstelle vonsummary
verwendet werden.
- Für bedingten Text kann
SwitchPreference
- Kann für bedingten Text
summaryOn
odersummaryOff
anstelle vonsummary
enthalten. - Kann
switchTextOn
oderswitchTextOff
haben.
- Kann für bedingten Text
SeekBarPreference
- Fügen Sie
min
,max
unddefaultValue
hinzu.
- Fügen Sie
EditTextPreference
dialogTitle
,positiveButtonText
undnegativeButtonText
einschließen.- Kann
dialogMessage
und/oderdialogLayoutResource
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 entsprechendenentryValues
haben.
- Wird hauptsächlich aus
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 entsprechendeentryValues
enthalten.
- Wird hauptsächlich aus
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:
- Senden Sie in der Methode
onLoadChildren()
Ihres Dienstes einnull
-Ergebnis mithilfe dessendResult()
. PlaybackStateCompat
für die Mediensitzung festlegen anSTATE_ERROR
setState()
verwenden . Dadurch wird Android Automotive OS mitgeteilt, dass bis zu wurde der Fehler behoben.PlaybackStateCompat
für die Mediensitzung festlegen Fehlercode anERROR_CODE_AUTHENTICATION_EXPIRED
. Dadurch wird Android Automotive OS mitgeteilt, dass sich der Nutzer authentifizieren muss.PlaybackStateCompat
für die Mediensitzung festlegen imsetErrorMessage()
. Da diese Fehlermeldung an den Nutzer gerichtet ist, lokalisieren Sie sie für die aktuelle Sprache des Nutzers aus.PlaybackStateCompat
für die Mediensitzung festlegen mit dersetExtras()
. Fügen Sie die folgenden beiden Schlüssel hinzu:PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: eine Zeichenfolge, die auf der Schaltfläche angezeigt wird, mit der der Anmelde-Workflow beginnt. Da dieser String für den Nutzer sichtbar ist, lokalisieren Sie ihn für das aktuelle SprachePLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
: einPendingIntent
-Element, das die zu Ihrer Anmeldeaktivität, wenn der Nutzer auf die Schaltfläche tippt, die vomPLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
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ürAccountManager
.
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:
PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: ein Label für die Schaltfläche, mit der der Fehler behoben werden kann. Da dieser String für den Nutzer, lokalisieren Sie ihn für die aktuelle Sprache des Nutzers.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
: diePendingIntent
, die die Schaltfläche ausführt, um den Fehler zu beheben, z. B. indem du deine Anmeldeaktivitäten startest.
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:
- Öffnen Sie die Play Console.
- Wählen Sie Ihre App aus.
- Klicke im Menü auf der linken Seite auf Release > Einrichtung > Erweiterte Einstellungen > Formfaktoren:
- 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
- Für Autos entwickeln
- Test-App für Mediencontroller verwenden
- Benachrichtigungen unter Android Automotive OS
- Qualität von Android-Apps für Autos
Blogs
Videos
- How to Build Media Apps for Cars (Android Dev Summit '19)
- Android-Apps für Autos entwickeln (Google I/O'19)
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.
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: