Étendre votre application multimédia à Android for Cars

Proposez votre application sur les véhicules équipés d'Android Auto ou d'Android Automotive OS. Optez pour une architecture d'application qui fonctionne dans les deux cas afin que chaque utilisateur puisse profiter de votre application.

Qu'est-ce qu'Android for Cars ?

Une application multimédia pour voitures peut permettre aux utilisateurs de connecter facilement leur vie numérique à leur voiture. En étendant les mêmes applications de téléphone aux voitures, vous créez une meilleure expérience utilisateur. Pour ce faire, vous pouvez l'intégrer à Android Auto ou à Android Automotive OS.

Les applis Android pour les voitures doivent avant tout éviter toute distraction du conducteur. Vous pouvez réduire les distractions en suivant les bonnes pratiques, telles que les commandes vocales et une conception visuelle très pratique. De cette manière, votre application multimédia ne peut présenter des informations opportunes au pilote que lorsque cela est pertinent et utiliser des modèles prévisibles pour les tâches courantes.

Android Auto

Android Auto offre une expérience d'application automobile optimisée aux utilisateurs disposant d'un téléphone Android avec l'application Android Auto et d'une voiture ou d'un système stéréo compatible. Il peut utiliser votre application directement sur l'écran de sa voiture en connectant son téléphone. Pour permettre à Android Auto de se connecter à votre application pour téléphone, créez les services qu'Android Auto utilise pour présenter une interface optimisée au conducteur.

Android Automotive OS

Android Automotive OS est un système d'infoloisirs basé sur Android et intégré aux véhicules. Ce système est un appareil Android autonome, optimisé pour la conduite. Avec Android Automotive OS, les utilisateurs installent votre application directement sur la voiture au lieu de leur téléphone.

Catégories d'applications compatibles

Les applications multimédias permettent aux utilisateurs de parcourir et d'écouter de la musique, la radio, des livres audio et d'autres contenus audio dans la voiture. Pour en savoir plus, consultez Créer des applications de lecture audio pour voitures. Vous trouverez également d'autres informations sur la page Créer des applications multimédias pour voitures.

Les applications multimédias sont créées à l'aide de MediaLibraryService et MediaSession. Sur Android Automotive OS, vous pouvez également créer des écrans de connexion et de paramètres (à utiliser lorsque vous êtes à l'arrêt) à l'aide de Views ou de Compose.

Les applications vidéo permettent aux utilisateurs de regarder des vidéos en streaming lorsque la voiture est à l'arrêt. Leur principale fonction consiste à diffuser des vidéos en streaming. Ces applications sont créées à l'aide de Views ou de Compose. Pour en savoir plus, consultez Créer des applications de lecture vidéo pour Android Automotive OS. Pour en savoir plus, consultez la page Créer des applications vidéo pour Android Automotive OS.

Créer des applications de lecture audio pour voitures

Dans ce guide, nous partons du principe que vous disposez déjà d'une application de lecture multimédia de base. Si ce n'est pas le cas, pour commencer, consultez la section Créer une application de lecteur multimédia de base.

Ce guide vous fournit des informations sur la procédure à suivre, y compris des liens vers d'autres ressources avec des conseils spécifiques.

Composants de lecture

Media3 propose plusieurs composants clés pour les cas d'utilisation de lecture. Les classes qui composent ces composants vous sont familières si vous avez déjà travaillé avec des bibliothèques multimédias Android précédentes.

Le schéma suivant montre comment ces composants s'assemblent dans une application classique.

Les différents composants d'une application multimédia qui utilise Media3 se connectent ensemble de plusieurs manières simples en raison du partage d'interfaces et de classes.
Figure 1: Composants des applications multimédias

Pour en savoir plus, consultez la section Composants de lecture.

Implémenter un MediaLibraryService et un MediaLibrarySession

Un MediaLibraryService fournit une API standardisée pour diffuser votre bibliothèque multimédia et autoriser l'accès à celle-ci. Cette étape est nécessaire lorsque vous ajoutez la prise en charge d'Android Auto ou d'Android Automotive OS à votre application multimédia, car ces plates-formes fournissent leur propre interface utilisateur sécurisée pour votre bibliothèque multimédia. Pour en savoir plus sur l'implémentation et l'utilisation d'un MediaLibraryService, consultez la section Diffuser du contenu avec MediaLibraryService.

Pour les commandes de lecture, utilisez une session multimédia. L'API MediaSession offre un moyen universel d'interagir avec un lecteur audio ou vidéo. La bibliothèque Jetpack Media3 inclut MediaLibrarySession, qui étend MediaSession pour ajouter des API de navigation de contenu.

Connecter une session multimédia à un lecteur permet à une application de promouvoir la lecture de contenus multimédias en externe et de recevoir des commandes de lecture de sources externes telles qu'Android Auto, Android Automotive OS ou l'Assistant Google. Pour en savoir plus, consultez Contrôler et annoncer la lecture avec MediaSession et Utiliser une MediaLibrarySession.

Votre session multimédia doit au minimum être compatible avec les commandes du lecteur suivantes:

Le guide Activer les commandes de lecture décrit les manières de personnaliser les commandes de lecture dans les voitures.

Lorsqu'Android Auto ou Android Automotive OS se connecte à votre application, ils demandent l'affichage d'une bibliothèque de contenu, ce qui déclenche la méthode de rappel onGetLibraryRoot(). Vous pouvez renvoyer rapidement un élément multimédia racine pour autoriser l'accès à votre bibliothèque. La méthode de rappel onGetChildren() est appelée lorsqu'Android Auto ou Android Automotive OS tente de parcourir des niveaux plus profonds de votre bibliothèque de contenus.

Ces plates-formes appliquent des limites supplémentaires à la structure de votre bibliothèque de contenu. Pour savoir comment personnaliser l'affichage de votre bibliothèque de contenu, consultez le guide Créer votre service de navigateur multimédia.

Déclarer la prise en charge d'Android Auto

Utilisez l'entrée du fichier manifeste suivante pour déclarer que votre application est compatible avec Android Auto :

<application>
    ...
    <meta-data android:name="com.google.android.gms.car.application"
        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 compatibles avec 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. Ce fichier doit inclure le contenu suivant :

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

Déclarer la prise en charge d'Android Automotive OS

Vous devez créer un module automobile, car toute la logique de votre application ne peut pas être partagée avec une application automobile. Certains composants d'Android Automotive OS, tels que le fichier manifeste, ont des exigences spécifiques à la plate-forme. Créez un module capable de séparer le code de ces composants des autres codes de votre projet, comme celui utilisé pour votre application mobile.

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 mettez en œuvre 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.

Utilisez l'entrée de fichier manifeste suivante pour déclarer que votre application est compatible avec 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>

Étapes supplémentaires

Maintenant que vous avez une application pour Android Auto et Android Automotive OS, vous pouvez prendre des mesures supplémentaires pour optimiser votre application afin qu'elle soit utilisée de manière plus sécurisée pendant la conduite. Pour obtenir d'autres recommandations afin de garantir une expérience utilisateur pratique et sécurisée, consultez les guides techniques des sections Commandes vocales, Mesures de protection contre la distraction et Gestion des erreurs.

Créer des applications de lecture de vidéos pour Android Automotive OS

Étant donné que les applications vidéo sont classées séparément des applications multimédias dans les voitures, vous devez connaître certaines exigences spécifiques pour les applications vidéo, comme décrit dans Créer des applications à utiliser à l'arrêt pour Android Automotive OS et Créer des applications vidéo pour Android Automotive OS. Vous devez suivre les instructions ci-dessous.

Marquer votre application comme une application vidéo

Pour indiquer que votre application est compatible avec les vidéos, ajoutez un fichier XML nommé automotive_app_desc.xml au répertoire res/xml/ de votre projet. Dans ce fichier, incluez le contenu suivant:

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

Ensuite, dans l'élément application de votre fichier manifeste, ajoutez l'élément meta-data suivant qui référence le fichier XML:

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