Ajouter la prise en charge d'Android Automotive OS à votre application multimédia

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 :

  1. Activer les fonctionnalités automobiles dans Android Studio
  2. Créer un module automobile
  3. Mettre à jour vos dépendances Gradle
  4. Implémenter des activités de paramétrage et de connexion (facultatif)
  5. (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 :

  1. Dans Android Studio, cliquez sur File > New > New Module (Fichier > Nouveau > Nouveau module).
  2. Sélectionnez Automotive Module (Module automobile), puis cliquez sur Next (Suivant).
  3. 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.
  4. Indiquez un nom de module dans Module name.
  5. Adaptez le nom du package dans Package name pour qu'il corresponde à votre application.
  6. 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.

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

Workflows des activités de paramétrage ou de connexion

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

Pour implémenter votre activité, procédez comme suit :

  1. Copiez le dossier automotive/automotive-lib dans votre module automobile.
  2. Définissez une arborescence de préférences comme dans automotive/src/main/res/xml/preferences.xml.
  3. Implémentez un PreferenceFragmentCompat affiché par votre activité de paramétrage. Pour en savoir plus, consultez les fichiers SettingsFragment.kt et SettingsActivity.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ôt ListPreference.
  • 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.
  • Incluez une key et un title dans tous les composants suivants. Vous pouvez également inclure un summary, une icon ou les deux :
    • Preference
      • Personnalisez la logique dans le rappel onPreferenceTreeClick() de votre implémentation PreferenceFragmentCompat.
    • CheckBoxPreference
      • Peut contenir summaryOn ou summaryOff au lieu de summary pour le texte conditionnel.
    • SwitchPreference
      • Peut contenir summaryOn ou summaryOff au lieu de summary pour le texte conditionnel.
      • Peut contenir switchTextOn ou switchTextOff.
    • SeekBarPreference
      • Incluez min, max et defaultValue.
    • EditTextPreference
      • Incluez dialogTitle, positiveButtonText et negativeButtonText.
      • Peut contenir dialogMessage et/ou dialogLayoutResource.
    • 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 des entryValues correspondantes.
    • 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 des entryValues correspondantes.

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 :

  1. Dans la méthode onLoadChildren() de votre service, envoyez un résultat null à l'aide de la méthode sendResult().
  2. Définissez le PlaybackStateCompat de la session multimédia sur STATE_ERROR à l'aide de la méthode setState(). 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.
  3. Définissez le code d'erreur PlaybackStateCompat de la session multimédia sur ERROR_CODE_AUTHENTICATION_EXPIRED. Cela indique à Android Automotive OS que l'utilisateur doit s'authentifier.
  4. Définissez le message d'erreur PlaybackStateCompat de la session multimédia à l'aide de la méthode setErrorMessage(). Étant donné que ce message d'erreur est destiné aux utilisateurs, localisez-le en fonction de leurs paramètres régionaux actuels.
  5. Définissez les extras PlaybackStateCompat de la session multimédia à l'aide de la méthode setExtras(). Incluez les deux clés suivantes :

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 pour AccountManager.

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 :

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 :

  1. Ouvrez la Play Console.
  2. Sélectionnez votre application.
  3. Dans le menu de gauche, cliquez sur Release > Setup > Advanced settings > Form factors (Version > Configuration > Paramètres avancés > Facteurs de forme).
  4. 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

Blogs

Vidéos

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.

Signaler un 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.