Android Automotive OS permet aux utilisateurs d'installer des applications dans leur voiture. Pour atteindre les utilisateurs de cette plate-forme, vous devez proposer une application optimisée pour la conduite et compatible avec Android Automotive OS. Vous pouvez réutiliser la quasi-totalité du code et des ressources de votre application Android Auto, mais vous devrez créer un build distinct qui répond aux exigences de cette page.
Présentation du développement
Ajouter la prise en charge d'Android Automotive OS est une procédure qui ne comporte que quelques étapes, comme indiqué dans les sections suivantes :
- Activer les fonctionnalités automobiles dans Android Studio
- Créer un module automobile
- Mettre à jour vos dépendances Gradle
- Implémenter des activités de paramétrage et de connexion (facultatif)
- (Facultatif) Lire les indications de l'hôte multimédia
Considérations de conception
Android Automotive OS se charge de la mise en page du contenu multimédia reçu du navigateur multimédia de votre application. Cela signifie que votre application ne dessine pas l'interface utilisateur et qu'elle ne démarre aucune de vos activités lorsqu'un utilisateur lit des contenus multimédias.
Si vous implémentez des activités de paramétrage et de connexion, ces activités doivent être optimisées pour les véhicules. Reportez-vous aux consignes de conception pour Android Automotive OS lorsque vous concevez ces sections de votre application.
Configurer votre projet
Vous devez configurer plusieurs parties du projet de votre application pour activer la prise en charge d'Android Automotive OS.
Activer les fonctionnalités automobiles dans Android Studio
Utilisez Android Studio 4.0 ou version ultérieure pour vous assurer que toutes les fonctionnalités d'Automotive OS sont activées.
Créer un module automobile
Certains composants d'Android Automotive OS, comme le fichier manifeste, ont des exigences spécifiques à la plate-forme. Vous devez donc créer un module capable de séparer le code de ces composants des autres codes de votre projet, comme celui utilisé pour votre application pour téléphone.
Pour ajouter un module automobile à votre projet, procédez comme suit :
- Dans Android Studio, cliquez sur File > New > New Module (Fichier > Nouveau > Nouveau module).
- Sélectionnez Automotive Module (Module automobile), puis cliquez sur Next (Suivant).
- Indiquez un nom d'application/de bibliothèque dans Application/Library name. Il s'agit du nom que les utilisateurs voient pour votre application sur Android Automotive OS.
- Indiquez un nom de module dans Module name.
- Adaptez le nom du package dans Package name pour qu'il corresponde à votre application.
Sélectionnez API 28: Android 9.0 (Pie) pour Minimum SDK (SDK minimal), puis cliquez sur Next (Suivant).
Toutes les voitures compatibles avec Android Automotive OS s'exécutent sur Android 9 (niveau d'API 28) ou version ultérieure. La sélection de cette valeur cible donc toutes les voitures compatibles.
Sélectionnez No Activity (Aucune activité), puis cliquez sur Finish (Terminer).
Après avoir créé votre module sur Android Studio, ouvrez AndroidManifest.xml
dans votre nouveau module automobile :
<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>
L'élément application
contient des informations sur l'application standard, ainsi qu'un élément uses-feature
qui déclare la prise en charge d'Android Automotive OS. Notez qu'aucune activité n'a été déclarée dans le fichier manifeste.
Si vous configurez des activités de paramétrage ou de connexion, ajoutez-les ici. Ces activités sont déclenchées par le système à l'aide d'intents explicites. Ce sont les seules que vous déclarez dans le fichier manifeste pour votre application Android Automotive OS.
Une fois les activités de paramétrage ou de connexion ajoutées, terminez votre fichier manifeste en définissant l'attribut android:appCategory="audio"
dans l'élément application
et en ajoutant les éléments uses-feature
suivants :
<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>
Si vous les définissez explicitement sur required="false"
, vous vous assurez que votre application n'entre pas en conflit avec les fonctionnalités matérielles disponibles sur les appareils Automotive OS.
Déclarer la compatibilité des contenus multimédias avec Android Automotive OS
Utilisez l'entrée de fichier manifeste suivante pour déclarer que votre application prend en charge Android Automotive OS :
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Cette entrée du fichier manifeste fait référence à un fichier XML qui déclare les fonctionnalités automobiles prises en charge par votre application.
Pour indiquer que vous disposez d'une application multimédia, ajoutez un fichier XML nommé automotive_app_desc.xml
au répertoire res/xml/
de votre projet. Incluez le contenu suivant dans ce fichier :
<automotiveApp>
<uses name="media"/>
</automotiveApp>
Filtres d'intent
Android Automotive OS utilise des intents explicites pour déclencher des activités dans votre application multimédia. N'incluez aucune activité avec des filtres d'intent CATEGORY_LAUNCHER
ou ACTION_MAIN
dans le fichier manifeste.
Les activités telles que celle illustrée dans l'exemple suivant ciblent généralement un téléphone ou un autre appareil mobile. Déclarez ces activités dans le module qui compile l'application pour téléphone, et non dans celui qui compile votre application 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>
Mettre à jour vos dépendances Gradle
Nous vous recommandons de conserver votre service de navigateur multimédia dans un module distinct que vous partagerez entre votre application pour téléphone et votre module automobile. En utilisant cette approche, vous devez mettre à jour votre module automobile pour inclure le module partagé, comme indiqué dans l'extrait de code suivant :
my-auto-module/build.gradle
Groovy
buildscript { ... dependencies { ... implementation project(':shared_module_name') } }
Kotlin
buildscript { ... dependencies { ... implementation(project(":shared_module_name")) } }
Implémenter les activités de paramétrage ou de connexion
En plus de votre service de navigateur multimédia, vous pouvez fournir des activités de paramétrage ou de connexion optimisées pour les véhicules pour votre application Android Automotive OS. Ces activités vous permettent de fournir des fonctionnalités d'application qui ne sont pas incluses dans les API Android Media.
N'implémentez ces activités que si votre application Android Automotive OS doit autoriser les utilisateurs à se connecter ou à spécifier des paramètres d'application. Ces activités ne sont pas utilisées par Android Auto.
Workflows de l'activité
Le schéma suivant montre comment un utilisateur interagit avec vos activités de paramétrage ou de connexion à l'aide d'Android Automotive OS :
Figure 1. Workflows des activités de paramétrage ou de connexion.
Ne vous laissez pas distraire dans les paramètres ou lors de la procédure de connexion
Pour vous assurer que vos paramètres et/ou la procédure de connexion ne sont disponibles que lorsque le véhicule de l'utilisateur est à l'arrêt, vérifiez que le ou les éléments <activity>
n'incluent pas l'élément <meta-data>
, comme c'est le cas dans l'exemple ci-dessous. Si un tel élément est présent, votre appli sera refusée suite à son examen.
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Ajouter une activité de paramétrage
Vous pouvez ajouter une activité de paramétrage optimisée pour les véhicules afin que les utilisateurs puissent configurer les paramètres de votre application dans leur voiture. Votre activité de paramétrage peut également fournir d'autres workflows, par exemple pour se connecter ou se déconnecter d'un compte utilisateur, ou pour changer de compte utilisateur. N'oubliez pas que cette activité n'est déclenchée que par une application exécutée sur Android Automotive OS. Les applications pour téléphone connectées à Android Auto ne l'utilisent pas.
Déclarer une activité de paramétrage
Vous devez déclarer votre activité de paramétrage dans le fichier manifeste de votre application, comme indiqué dans l'extrait de code suivant :
<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>
Implémenter votre activité de paramétrage
Lorsqu'un utilisateur lance votre application, Android Automotive OS détecte l'activité de paramétrage que vous avez déclarée et affiche une affordance, comme une icône.
L'utilisateur peut appuyer sur cette affordance ou la sélectionner depuis l'écran de sa voiture pour accéder à l'activité. Android Automotive OS envoie l'intent ACTION_APPLICATION_PREFERENCES
qui indique à votre application de lancer l'activité de paramétrage.
Le reste de cette section explique comment adapter le code de l'application exemple Universal Music Player (UAMP) afin d'implémenter une activité de paramétrage pour votre application.
Pour commencer, téléchargez l'exemple de code :
# 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
Pour implémenter votre activité, procédez comme suit :
- Copiez le dossier
automotive/automotive-lib
dans votre module automobile. - Définissez une arborescence de préférences comme dans
automotive/src/main/res/xml/preferences.xml
. Implémentez un
PreferenceFragmentCompat
affiché par votre activité de paramétrage. Pour en savoir plus, consultez les fichiersSettingsFragment.kt
etSettingsActivity.kt
dans UAMP, ainsi que le guide des paramètres Android.
Lorsque vous implémentez l'activité de paramétrage, tenez compte des bonnes pratiques suivantes pour utiliser certains des composants de la bibliothèque des préférences :
- Il ne doit pas y avoir plus de deux niveaux de profondeur en dessous de la vue principale de l'activité de paramétrage.
- N'utilisez pas
DropDownPreference
. Utilisez plutôtListPreference
. - Composants organisationnels :
PreferenceScreen
- Il doit s'agir du premier niveau de l'arborescence des préférences.
PreferenceCategory
- Utilisé pour regrouper les objets
Preference
. - Incluez un
title
.
- Utilisé pour regrouper les objets
- Incluez une
key
et untitle
dans tous les composants suivants. Vous pouvez également inclure unsummary
, uneicon
ou les deux :Preference
- Personnalisez la logique dans le rappel
onPreferenceTreeClick()
de votre implémentationPreferenceFragmentCompat
.
- Personnalisez la logique dans le rappel
CheckBoxPreference
- Peut contenir
summaryOn
ousummaryOff
au lieu desummary
pour le texte conditionnel.
- Peut contenir
SwitchPreference
- Peut contenir
summaryOn
ousummaryOff
au lieu desummary
pour le texte conditionnel. - Peut contenir
switchTextOn
ouswitchTextOff
.
- Peut contenir
SeekBarPreference
- Incluez
min
,max
etdefaultValue
.
- Incluez
EditTextPreference
- Incluez
dialogTitle
,positiveButtonText
etnegativeButtonText
. - Peut contenir
dialogMessage
et/oudialogLayoutResource
.
- Incluez
com.example.android.uamp.automotive.lib.ListPreference
- Dérive principalement de
ListPreference
. - Permet d'afficher une liste à choix unique d'objets
Preference
. - Doit contenir un tableau
entries
et desentryValues
correspondantes.
- Dérive principalement de
com.example.android.uamp.automotive.lib.MultiSelectListPreference
- Dérivé principalement de
MultiSelectListPreference
- Permet d'afficher une liste à choix multiples d'objets
Preference
. - Doit contenir un tableau
entries
et desentryValues
correspondantes.
- Dérivé principalement de
Ajouter une activité de connexion
Si votre application nécessite qu'un utilisateur se connecte pour pouvoir l'utiliser, vous pouvez ajouter une activité de connexion optimisée pour les véhicules qui gère la connexion et la déconnexion. Vous pouvez aussi ajouter des workflows de connexion et de déconnexion à une activité de paramétrage, mais vous devez utiliser une activité de connexion dédiée si votre application ne peut pas être utilisée tant qu'un utilisateur ne s'est pas connecté. N'oubliez pas que cette activité n'est déclenchée que par une application exécutée sur Android Automotive OS. Les applications pour téléphone connectées à Android Auto ne l'utilisent pas.
Exiger la connexion au démarrage de l'application
Pour obliger un utilisateur à se connecter avant de pouvoir utiliser votre application, votre service de navigateur multimédia doit effectuer les opérations suivantes :
- Dans la méthode
onLoadChildren()
de votre service, envoyez un résultatnull
à l'aide de la méthodesendResult()
. - Définissez le
PlaybackStateCompat
de la session multimédia surSTATE_ERROR
à l'aide de la méthodesetState()
. Cela indique à Android Automotive OS qu'aucune autre opération ne peut être effectuée tant que l'erreur n'a pas été résolue. - Définissez le code d'erreur
PlaybackStateCompat
de la session multimédia surERROR_CODE_AUTHENTICATION_EXPIRED
. Cela indique à Android Automotive OS que l'utilisateur doit s'authentifier. - Définissez le message d'erreur
PlaybackStateCompat
de la session multimédia à l'aide de la méthodesetErrorMessage()
. Étant donné que ce message d'erreur est destiné aux utilisateurs, localisez-le en fonction de leurs paramètres régionaux actuels. Définissez les extras
PlaybackStateCompat
de la session multimédia à l'aide de la méthodesetExtras()
. Incluez les deux clés suivantes :PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: chaîne affichée sur le bouton qui lance le workflow de connexion. Étant donné que cette chaîne est destinée aux utilisateurs, localisez-la en fonction de leurs paramètres régionaux actuels.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
: unPendingIntent
qui redirige l'utilisateur vers votre activité de connexion lorsqu'il appuie sur le bouton indiqué parPLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
.
L'extrait de code suivant montre comment votre application peut exiger que l'utilisateur se connecte avant de l'utiliser :
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);
Une fois l'utilisateur authentifié, rétablissez PlaybackStateCompat
sur un état autre que STATE_ERROR
, puis renvoyez l'utilisateur à Android Automotive OS en appelant la méthode finish()
de l'activité.
Implémenter votre activité de connexion
Google propose divers outils d'identité que vous pouvez utiliser pour aider les utilisateurs à se connecter à votre application dans leur voiture. Certains outils, tels que Firebase Authentication, fournissent des kits d'outils full-stack qui peuvent vous aider à créer des expériences d'authentification personnalisées. D'autres outils exploitent les identifiants existants d'un utilisateur ou d'autres technologies pour vous aider à créer des expériences de connexion fluides.
Les outils suivants peuvent vous aider à faciliter la connexion des utilisateurs déjà connectés sur un autre appareil :
- Connexion et inscription avec One Tap : si vous avez déjà implémenté One Tap sur d'autres appareils (comme votre application pour téléphone), faites-le également pour que votre application Android Automotive OS prenne en charge les utilisateurs One Tap existants.
- Google Sign-In : si vous avez déjà implémentéGoogle Sign-In pour d'autres appareils (comme votre application pour téléphone), faites-le également pour que votre application Android Automotive OS prenne en charge les utilisateurs Google Sign-In existants.
- Saisie automatique avec Google : si les utilisateurs ont activé la saisie automatique avec Google sur leurs autres appareils Android, leurs identifiants sont enregistrés dans le gestionnaire de mots de passe de Google. Lorsque ces utilisateurs se connectent à votre application Android Automotive OS, la saisie automatique avec Google suggère des identifiants enregistrés pertinents. L'utilisation de la saisie automatique avec Google ne nécessite aucun effort de développement d'application. Toutefois, les développeurs d'applications peuvent optimiser leurs applications pour de meilleurs résultats. La saisie automatique avec Google est compatible avec tous les appareils dotés d'Android 8.0 (niveau d'API 26) ou version ultérieure (y compris Android Automotive OS).
Utiliser AccountManager
Les applications Android Automotive OS avec authentification doivent utiliser AccountManager pour les raisons suivantes :
- Meilleure expérience utilisateur et gestion de compte simplifiée : les utilisateurs peuvent facilement gérer tous leurs comptes à partir du menu "Comptes" dans les paramètres système, y compris la connexion et la déconnexion.
- Expériences des invités : les voitures étant des appareils partagés, les OEM peuvent activer des expériences "Invité" dans le véhicule, lorsque l'ajout de comptes n'est pas possible. Cette restriction est obtenue à l'aide de
DISALLOW_MODIFY_ACCOUNTS
pourAccountManager
.
Autorisations
Si vous devez demander des autorisations à l'utilisateur, utilisez le même flux que l'activité d'authentification ou l'activité de paramétrage du diagramme des workflows d'activité illustré dans une section précédente.
Lire les indications de l'hôte multimédia
En fonction de l'application système (y compris de sa version) qui se connecte à votre service de navigateur multimédia, votre application peut recevoir les extras suivants:
Gestion des erreurs
Les erreurs dans les applications multimédias sous Android Automotive OS sont transmises via le PlaybackStateCompat
de la session multimédia. Pour toutes les erreurs, définissez un code et un message d'erreur appropriés dans le PlaybackStateCompat
. Un Toast
s'affiche alors dans l'interface utilisateur.
Lorsqu'une erreur se produit, mais que la lecture peut se poursuivre, générez une erreur non fatale. Par exemple, un utilisateur peut lire de la musique dans une application avant de se connecter, mais il doit se connecter avant de pouvoir ignorer un titre. Lorsque vous utilisez une erreur non fatale, le système peut suggérer à l'utilisateur de se connecter sans interrompre la lecture de l'élément multimédia en cours.
Lorsque vous générez une erreur non fatale, conservez le reste du PlaybackStateCompat
tel quel, à l'exception du code d'erreur et du message d'erreur. L'utilisation de cette approche permet de poursuivre la lecture de l'élément multimédia actuel pendant que l'utilisateur décide de se connecter ou non.
Lorsque la lecture n'est pas possible (par exemple, en l'absence de connexion Internet et de contenu hors connexion), définissez l'état PlaybackStateCompat
sur STATE_ERROR
.
Lors des mises à jour ultérieures de votre PlaybackStateCompat
, effacez les codes d'erreur et les messages d'erreur pour éviter d'afficher plusieurs avertissements pour la même erreur.
Si, à un moment donné, vous ne parvenez pas à charger une arborescence de navigation (par exemple, si vous exigez une authentification et que l'utilisateur n'est pas connecté), envoyez une arborescence de navigation vide. Pour ce faire, renvoyez un résultat nul à partir de onLoadChildren()
pour le nœud multimédia racine. Dans ce cas, le système affiche une erreur en plein écran avec le message d'erreur défini dans PlaybackStateCompat
.
Erreurs actionnables
Si une erreur peut être traitée, définissez également les deux extras suivants dans PlaybackStateCompat
:
PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: libellé du bouton sur lequel cliquer pour résoudre l'erreur. Étant donné que cette chaîne est destinée aux utilisateurs, localisez-la en fonction de leurs paramètres régionaux actuels.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
:PendingIntent
que le bouton exécutera pour résoudre l'erreur ; par exemple, lancement de votre activité de connexion.
Les erreurs actionnables apparaissent sous la forme d'un Dialog
et ne peuvent être résolues par les utilisateurs que lorsque la voiture est à l'arrêt.
Tester les cas d'erreur
Vérifiez que votre application gère correctement les erreurs dans tous les cas :
- Différents niveaux de votre produit : par exemple, sans frais/premium ou connecté/non connecté
- Différents états de conduite : par exemple, stationné ou conduite en cours
- Différents états de connectivité : par exemple, en ligne ou hors connexion
Autres points à prendre en compte
Gardez à l'esprit les points suivants lorsque vous développez votre application Android Automotive OS :
Contenu hors connexion
Le cas échéant, activez la lecture hors connexion. Les voitures avec Android Automotive OS doivent disposer de leur propre connexion de données, ce qui signifie qu'un forfait Internet est soit inclus dans le coût du véhicule, soit payé par l'utilisateur. Toutefois, la connectivité des voitures devrait être plus variable que celle des appareils mobiles.
Quelques points à garder en tête si vous envisagez d'utiliser le mode hors connexion :
- Le meilleur moment pour télécharger du contenu est lorsque votre application est utilisée.
- Ne partez pas du principe que le Wi-Fi est disponible. Il se peut qu'une voiture ne soit jamais à portée d'un réseau Wi-Fi ou que l'OEM ait désactivé le réseau Wi-Fi au profit d'un réseau mobile.
- Bien qu'il soit acceptable de mettre en cache intelligemment le contenu que les utilisateurs pourraient utiliser, nous vous recommandons de leur donner la possibilité de modifier ce comportement par le biais de votre activité de paramétrage.
- L'espace disque des voitures peut varier. Vous devez donc permettre aux utilisateurs de supprimer le contenu hors connexion en leur proposant, par exemple, une option dans votre activité de paramétrage.
Compatibilité avec WebView
Les WebViews sont compatibles avec Android Automotive OS, mais ne sont autorisées que pour vos activités de paramétrage et de connexion. Les activités qui utilisent une WebView doivent avoir une affordance "fermeture" ou "retour" en dehors de cette WebView.
Voici quelques exemples d'utilisation autorisée de WebViews :
- Afficher vos règles de confidentialité, vos conditions d'utilisation ou d'autres liens juridiques dans votre activité de paramétrage.
- Mettre en place un flux Web dans votre activité de connexion.
Lorsque vous utilisez une WebView, vous pouvez activer JavaScript.
Sécuriser votre WebView
Prenez toutes les précautions nécessaires pour que votre WebView ne puisse pas servir de point d'entrée sur Internet. Consultez l'extrait de code ci-dessous pour savoir comment limiter la WebView à l'URL utilisée dans l'appel loadUrl()
et empêcher les redirections. Nous vous recommandons vivement d'implémenter des mesures de protection de ce type lorsque cela est possible, par exemple lorsque vous affichez des liens d'ordre juridique.
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; }
Noms des packages
Étant donné que vous distribuez un APK (Android Package Kit) distinct pour Android Automotive OS, vous pouvez réutiliser le nom du package depuis votre application mobile ou en créer un autre. Si vous utilisez un nom de package différent, votre application possède deux fiches Play Store distinctes. Si vous réutilisez le nom de votre package actuel, votre application possède une seule fiche sur les deux plates-formes.
C'est avant tout une décision opérationnelle. Par exemple, si une équipe travaille sur l'application mobile et une autre sur l'application Android Automotive OS, il peut être judicieux d'avoir des noms de package distincts et de laisser chaque équipe gérer sa propre fiche Play Store. Quelle que soit votre approche, les efforts techniques sont relativement similaires.
Le tableau suivant récapitule quelques-unes des autres différences clés entre la conservation du nom de package actuel et l'utilisation d'un nouveau nom :
Fonctionnalité | Nom de package identique | Nouveau nom de package |
---|---|---|
Fiche Play Store | Une seule | Plusieurs |
Installation en miroir | Oui : "Réinstallation rapide de l'application" dans l'assistant de configuration | Non |
Processus d'examen du Play Store | Blocage des examens : si l'examen échoue pour un APK, les autres APK envoyés dans la même version sont bloqués | Examens individuels |
Statistiques, métriques et indicateurs clés | Combiné : vous pouvez effectuer un filtrage pour les données automobiles. | Séparé |
Référencement et classement dans les résultats de recherche | Basé sur la position actuelle | Pas de report |
Intégration à d'autres applications | Il est très probable qu'aucune modification ne soit nécessaire si le code média est partagé entre les deux APK. | Vous devrez peut-être mettre à jour l'application correspondante (par exemple, pour la lecture de l'URI avec l'Assistant Google). |
Questions fréquentes
Consultez les sections suivantes pour obtenir des réponses aux questions fréquentes concernant Android Automotive OS.
Matériel
Mon application peut-elle accéder au micro ?
Pour les applications ciblant Android 10 (niveau d'API 29) ou version ultérieure, consultez la documentation sur le partage d'entrées audio. Cela n'est pas possible avant le niveau d'API 29.
Quelles API de voiture pouvons-nous utiliser et comment ?
Vous êtes limité aux API fournies par l'OEM. Des processus sont en cours de développement afin de normaliser l'accès à ces API.
Les applications peuvent accéder aux API pour les voitures via SetProperty()
et GetProperty()
dans le CarPropertyManager
.
Reportez-vous au code source ou à la documentation de référence pour afficher la liste de toutes les propriétés disponibles. Si la propriété est annotée avec @SystemApi
, elle est limitée aux applications système préchargées.
Quels sont les types de codecs audio compatibles ?
Reportez-vous aux détails du codec audio dans le CDD Android.
Widevine DRM est-il compatible ?
Oui. Widevine DRM est compatible.
Développement et tests
Existe-t-il des restrictions ou des recommandations concernant l'utilisation de bibliothèques et de SDK tiers ?
Nous n'avons pas de consignes spécifiques concernant l'utilisation de bibliothèques et de SDK tiers. Si vous choisissez d'utiliser des bibliothèques et des SDK tiers, vous devez toujours respecter toutes les exigences de qualité des applications de voiture.
Puis-je utiliser un service de premier plan ?
Le seul cas d'utilisation autorisé pour un service de premier plan est le téléchargement de contenu pour une utilisation hors connexion. Si vous souhaitez bénéficier d'une autre utilisation pour un service de premier plan et que vous souhaitez bénéficier d'une assistance, contactez-nous via le groupe de discussion sur Android Automotive OS.
Publication d'applications Android Automotive OS
Comment publier mon application Android Automotive OS à l'aide de la Google Play Console ?
Le processus de publication de l'application est semblable à celui utilisé pour publier votre application pour téléphone, mais vous vous servirez d'un facteur de forme différent. Pour autoriser votre application à utiliser le facteur de forme d'Android Automotive OS, procédez comme suit :
- Ouvrez la Play Console.
- Sélectionnez votre application.
- Dans le menu de gauche, cliquez sur Release > Setup > Advanced settings > Form factors (Version > Configuration > Paramètres avancés > Facteurs de forme).
- Cliquez sur Add form factor > Android Automotive OS (Ajouter un facteur de forme > Android Automotive OS), puis suivez les instructions dans la Play Console.
Ressources supplémentaires
Pour en savoir plus sur Android Automotive OS, consultez les ressources supplémentaires suivantes.
Exemples
Guides
- Conception pour la conduite
- Utiliser l'application de test du contrôleur multimédia
- Notifications sur Android Automotive OS
- Qualité des applications Android pour les voitures
Blogs
- Mises à jour d'Android Automotive OS pour les développeurs
- Développer des applications pour Android Automotive OS
Vidéos
- How to Build Media Apps for Cars (Comment compiler des applications multimédia pour voitures – Android Dev Summit 2019)
- How to Build Android Apps for Cars (Comment compiler des applications Android pour voitures – Google I/O'19)
Signaler un problème lié à Android Automotive OS
Si vous rencontrez un problème lors du développement de votre application multimédia pour Android Automotive OS, vous pouvez le signaler à l'aide de Google Issue Tracker. Veillez à fournir toutes les informations requises dans le modèle de problème.
Avant de signaler un nouveau problème, vérifiez s'il figure déjà dans la liste des problèmes. Pour vous abonner et voter pour des problèmes, cliquez sur l'étoile correspondant à un problème dans l'outil Issue Tracker. Pour en savoir plus, consultez S'abonner à un problème.