Principes de base des applications

La voiture est votre toile : libérez le potentiel du développement Android pour la route

Haut-parleurs

À propos

À propos de l'intervention

À mesure que les écrans embarqués se multiplient dans les véhicules Android Auto et Android Automotive OS, les développeurs sont confrontés à un double défi unique : proposer des expériences riches et adaptatives lorsque le véhicule est à l'arrêt, et des expériences sécurisées et basées sur des modèles pendant la conduite. Dans cette session technique complète de 30 minutes, nous explorons l'architecture de bout en bout et les approches de développement pour adapter les applications Android aux voitures.

Des principes fondamentaux de la conception d'applications pour les voitures aux approches les plus récentes pour créer des expériences multimédias qui passent de l'audio à la vidéo lorsque la voiture passe de la conduite au stationnement, vous repartirez avec tout ce dont vous avez besoin pour lancer votre application.

Résumé

  • Android for Cars cible deux plates-formes : Android Auto et Android Automotive OS. L'un projette l'écran d'un téléphone, tandis que l'autre s'exécute directement sur le véhicule.
  • La bibliothèque d'applications pour voitures fournit des modèles d'interfaces optimisées pour la conduite qui s'adaptent à différentes configurations matérielles de voitures.
  • Les applications pour les voitures à l'arrêt s'appuient sur les activités Android standards pour offrir des expériences riches, comme le streaming vidéo, les jeux et les navigateurs Web.
  • La bibliothèque d'applications pour voitures 1.9 propose de nouveaux composants d'interface utilisateur et des jetons de personnalisation de la marque. Elle étend également la compatibilité des modèles multimédias à Android Automotive OS.
  • Les fonctionnalités de transition entre l'arrêt et la conduite lancent de manière dynamique des activités vidéo natives lorsque le véhicule est à l'arrêt, puis repassent aux modèles multimédias pour maintenir l'audio sans interruption pendant la conduite.

Ressources

Gemini Notebook

Thèmes

  • android-for-cars
  • android-auto
  • android-automotive-os
  • car-app-library
  • media3
  • applications-a-utiliser-en-stationnement

Transcription

Présentation d'Android pour voitures

  • Très bien.

  • Bienvenue à tous.

  • Merci d'avoir participé à cette session, "La voiture est votre toile".

  • Cette session est consacrée au développement Android pour l'automobile.

  • Je m'appelle Paul Lammertsma.

  • Et moi, Thomas Weathers.

  • Nous sommes ingénieurs DevRel dans l'équipe Android for Cars.

  • Je suis sûr que beaucoup d'entre vous ont consacré beaucoup de temps et d'énergie à s'assurer que leurs applications s'affichent et fonctionnent correctement sur une grande variété d'écrans et d'appareils (téléphones, pliables, tablettes, etc.).

  • Aujourd'hui, nous allons nous concentrer sur un écran auquel vous n'avez peut-être pas pensé.

  • et vous aider à toucher vos utilisateurs d'une manière unique.

  • Il s'agit de l'écran embarqué.

  • Commençons par une brève présentation de ce que nous entendons par "Android for Cars".

  • Android for Cars n'est pas un système monolithique.

  • Vous pouvez cibler deux plates-formes.

  • Tout d'abord, il y a Android Auto, un système projeté alimenté par un téléphone.

  • Avec Android Auto, l'application s'exécute sur votre téléphone et projette son UI sur l'écran de la voiture à l'aide d'une connexion filaire ou sans fil.

  • Ensuite, il y a Android Automotive OS, une variante d'Android qui s'exécute directement sur le véhicule.

  • Android Automotive OS fonctionne indépendamment du téléphone, a un accès direct au matériel du véhicule (comme la climatisation et la radio) et, surtout, gère sa propre connexion de données.

  • Un sous-ensemble de voitures équipées d'Android Automotive OS sont des voitures avec Google intégré.

  • Les voitures avec Google intégré sont également équipées d'applications et de services Google, tels que le Play Store, Gemini et Google Maps.

  • Bien qu'il existe deux plates-formes, notre objectif est de vous permettre de créer une seule fois des applications qui offrent une expérience de qualité sur les deux plates-formes.

  • Voici un exemple d'application multimédia créée une seule fois à l'aide de la bibliothèque d'applications pour voiture, et de son apparence sur Android Auto et Android Automotive OS, sur différents types et tailles d'écrans.

  • Il existe de nombreux types d'appareils et de surfaces pour lesquels vous pouvez développer des applications.

  • Cela soulève donc la question suivante : pourquoi l'utiliser pour les voitures ?

  • Tout d'abord, l'échelle est énorme.

  • Aujourd'hui, plus de 250 millions de voitures compatibles avec Android Auto sont en circulation, et plus de 100 modèles de voitures avec Google intégré de 16 marques différentes.

  • Et lorsque vos applications sont disponibles dans les voitures, vous touchez les utilisateurs lors de leurs trajets quotidiens, de leurs activités en famille, de leurs courses et même de leurs voyages.

  • Aux États-Unis, selon l'American Driving Survey 2024 de l'AAA, les conducteurs passent en moyenne 60 minutes par jour au volant.

  • Mais vous ne touchez pas seulement les utilisateurs lorsqu'ils conduisent.

  • Vous les touchez également lorsqu'ils sont garés.

  • Par exemple, ils peuvent être en train de recharger leur véhicule à une borne de recharge VE ou d'attendre dans la file d'attente pour récupérer leurs enfants à l'école.

  • Avec l'essor des écrans dédiés aux passagers, nous prévoyons encore plus d'opportunités d'engagement avec les utilisateurs à l'avenir.

  • Très bien.

  • Voyons maintenant les différents types d'expériences que vous pouvez créer pour les voitures.

  • Pour comprendre comment développer pour les voitures, il est utile de comprendre les deux situations et états principaux qui existent pour les applications lorsqu'elles s'exécutent dans un véhicule.

  • Tout d'abord, il y a les applications que vous utilisez pendant que vous conduisez.

  • Il s'agit d'expériences optimisées pour la conduite qui peuvent être utilisées lorsque le véhicule est en mouvement.

  • Cela inclut les applications des catégories que vous voyez à l'écran, comme les applications audio (que nous appelons généralement "médias"), les applications de messagerie et de communication, de navigation, etc.

  • Les expériences optimisées pour la conduite doivent respecter des critères stricts de protection contre les distractions.

  • Il existe des considérations particulières concernant la création d'une UI pour une application afin qu'elle puisse être utilisée en toute sécurité lorsque le véhicule est en mouvement.

  • Il existe plusieurs façons de créer des applications optimisées pour la conduite.

Présentation de la bibliothèque d'applications pour voitures

  • Mais dans cette présentation, nous nous concentrerons spécifiquement sur l'utilisation de la bibliothèque d'applications Car App.

  • Il s'agit d'un ensemble de bibliothèques Jetpack qui fournissent un modèle de framework offrant des interfaces utilisateur optimisées pour la conduite, tout en s'adaptant aux différentes configurations matérielles présentes dans les voitures.

  • Pensez par exemple aux modalités de saisie, aux tailles d'écran et aux formats.

  • Bien que ce ne soit pas la seule façon de créer des expériences optimisées pour la conduite, l'approche sur laquelle je souhaite me concentrer dans cette présentation est la création avec la bibliothèque d'applications Android for Cars.

  • Nous l'appelons souvent CAL.

  • Comme je l'ai mentionné il y a un instant, la bibliothèque d'applications pour voitures est un ensemble de bibliothèques qui vous aident à créer vos applications pour les voitures.

  • Il s'agit d'un modèle de framework qui fournit des interfaces utilisateur optimisées pour la conduite tout en s'adaptant aux différentes configurations matérielles.

  • Vous pouvez créer votre application et avoir la certitude qu'elle fonctionnera correctement sur toutes ces configurations, qu'elles soient équipées d'Android Auto ou d'Android Automotive OS.

  • Les applications créées à l'aide de CAL peuvent s'appuyer sur cette architecture client hôte.

  • L'application hôte, qui est soit Android Auto, soit Google Automotive App Host dans le cas des voitures avec Google intégré, est le moteur de rendu du système.

  • C'est lui qui contrôle ce qui doit être affiché à l'utilisateur sur ses écrans.

  • En tant que développeur d'applications, vous ne dessinez donc pas de pixels.

  • À la place, vous fournissez des données structurées et l'état de vos données aux modèles de la bibliothèque d'applications pour voitures.

  • C'est cet hôte qui prend ensuite ces données et les affiche de manière sécurisée, conformément aux normes de sécurité, avec une mise en page optimisée pour limiter les distractions.

  • Examinons maintenant les classes de la bibliothèque Car App et ce que vous devez étendre pour créer votre application, en commençant par CarAppService.

  • Il s'agit d'une sous-classe du service Android qui sert de point d'entrée pour la communication entre les applications hôtes et les applications clientes. Son but est de créer des instances de session avec lesquelles l'hôte interagit ensuite.

  • Une session est une instance d'une application cliente s'exécutant sur l'écran d'un véhicule.

  • Comme d'autres composants Android, elle a son propre cycle de vie qui peut être utilisé pour initialiser et supprimer des ressources utilisées par l'instance de la session.

  • Il s'agit d'une relation un à plusieurs entre le CarAppService et une session.

  • Par exemple, un CarAppService peut avoir deux instances de session, une pour un premier écran et l'autre pour un écran de cluster pour les applications de navigation compatibles avec les écrans de cluster.

  • Voici un exemple : une voiture dispose d'un écran principal et d'un écran de cluster. Chaque écran est associé à une session dédiée. C'est également ainsi que vous, en tant que développeur d'applications, pouvez prendre en charge les véhicules multi-écrans.

  • Ensuite, au cours d'une session, les instances d'écran sont responsables de la génération d'interfaces utilisateur affichées par les applications hôtes.

  • Ces interfaces utilisateur sont représentées par des classes de modèles qui modélisent chacune un type de mise en page spécifique, par exemple une grille ou une liste.

  • Chaque session gère donc une pile d'instances d'écran qui gèrent les parcours utilisateur à travers les différentes parties de votre application. Comme pour la session, un écran a son propre cycle de vie auquel vous pouvez vous connecter.

  • Mais ce n'est pas parce que l'hôte affiche votre UI et que vous utilisez des modèles de la bibliothèque d'applications pour voitures que vous êtes limité ou que vous ne pouvez pas personnaliser votre application.

  • Vous pouvez utiliser de nombreux modèles et composants, et les combiner pour obtenir l'expérience souhaitée.

  • Il existe des modèles à usage général, qui peuvent être utilisés par tous les types d'applications de la bibliothèque d'applications pour voitures, et des modèles à usage spécial, destinés à des expériences dans l'application particulières, telles que la navigation ou les points d'intérêt.

  • Mais avant d'entrer dans les détails de la création d'expériences optimisées pour la conduite, je souhaite aborder l'autre situation dans laquelle vous pouvez exécuter des applications dans les voitures : lorsque la voiture est garée.

Développer des applications pour les voitures à l'arrêt

  • Certaines catégories d'applications ne peuvent être utilisées que lorsque le véhicule est à l'arrêt, comme les applications vidéo, les jeux et les navigateurs.

  • Mais lorsque la voiture n'est pas en mouvement, les consignes concernant la distraction du conducteur sont levées, et vous pouvez proposer des expériences plus conformes à votre UI adaptative existante.

  • Les applications pour les véhicules garés sont basées sur des activités et sont similaires, voire identiques, aux activités utilisées sur d'autres appareils, comme les téléphones ou les tablettes. Nous aborderons les applications pour les véhicules garés en détail dans la section suivante.

  • Bien que les expériences dans l'application à utiliser à l'arrêt réutilisent les activités adaptatives existantes, vous devez respecter des consignes relatives à la qualité spécifiques aux voitures, qu'il s'agisse des déclarations de fichier manifeste, des encoches ou de la mise en pause de la lecture lorsque la voiture commence à rouler.

  • Pour vous aider à automatiser cette tâche, nous avons lancé une nouvelle compétence Android pour les applications mises en attente.

  • Avant de commencer, assurez-vous d'avoir installé la CLI Android. Vous trouverez le lien court pour l'installer ici.

  • Une fois la configuration terminée, exécutez android skills list pour explorer les compétences disponibles.

    android skills list
    android skills add android-for-cars-parked-apps
  • Il existe de nombreuses compétences différentes que vous pouvez utiliser pour passer à la vitesse supérieure dans le développement Android.

  • Pour Android pour les voitures, vous pouvez utiliser android skills add android-for-cars-parked-apps pour ajouter la compétence au contexte de votre agent.

  • Désormais, quel que soit votre agent IA préféré, il vous fournit des instructions détaillées pour configurer votre fichier manifeste pour Android Auto ou Android Automotive OS, gérer les encarts de fenêtre de voiture et des éléments tels que le retour en arrière, appliquer les restrictions de lecture pour éviter la distraction du conducteur, et même auditer votre application de vidéo, de jeu ou de navigateur avant de la soumettre à Google Play.

Présentation des catégories d'applications pour voiture

  • Créer des applications pour les voitures est également un peu particulier en raison de la notion de catégories d'applications.

  • Comme je l'ai mentionné précédemment, certaines catégories d'applications peuvent être utilisées pendant la conduite, tandis que d'autres ne peuvent l'être qu'à l'arrêt.

  • Les catégories mises en évidence sont celles qui peuvent être utilisées pendant la conduite.

  • Certaines d'entre elles sont indiquées par "CAL", qui, comme je l'ai mentionné, correspond à la bibliothèque d'applications pour voitures. Les applications de cette catégorie utilisent des modèles comme ceux que nous avons vus il y a un instant.

  • Je vais les passer en revue rapidement, sans entrer dans les détails.

  • Commençons par les applications multimédias. Il s'agit d'applications qui lisent des contenus audio, et non vidéo.

  • Il existe deux façons de les créer.

  • La première option, indiquée par MediaBrowserService, est la plus simple.

  • Vous fournissez des métadonnées, tandis que l'interface de l'écran d'infodivertissement se charge entièrement d'afficher l'interface utilisateur de lecture et du navigateur multimédia de manière optimisée pour la voiture.

  • L'autre option consiste à créer des applications multimédias à l'aide de la bibliothèque d'applications pour voitures. Vous disposez ainsi de plus de contrôle et d'options pour personnaliser le style et la présentation de vos applications multimédias. Thomas nous en dira plus dans un instant.

  • Les applications de navigation sont, bien sûr, un cas d'utilisation clé, car elles fournissent des itinéraires et des instructions de navigation détaillées.

  • Les applications de covoiturage entrent également dans cette catégorie.

  • Les applications de points d'intérêt vous aident à trouver des lieux utiles à proximité, comme des bornes pour véhicules électriques ou des places de parking.

  • Les applications de l'Internet des objets (IoT) vous permettent d'accéder à des appareils connectés où que vous soyez, par exemple pour gérer votre maison.

  • Des applications météo sont également disponibles et peuvent, par exemple, fournir des radars en temps réel, des alertes de tempête et des prévisions spécifiques à un lieu.

  • Enfin, la communication se divise en trois sous-catégories : l'extension des notifications de base à la voiture, les applications de messagerie et les applications d'appel vidéo.

  • Enfin, il existe des catégories d'applications utilisables lorsque le véhicule est garé : les applications de streaming vidéo, les jeux et les navigateurs Web.

  • Et j'ai le plaisir de vous annoncer que depuis quelques semaines, tous les développeurs peuvent publier des jeux sur Android Auto et Android Automotive OS.

  • Vous remarquerez que certaines de ces catégories sont indiquées comme "Ouvert", d'autres comme "En version bêta" et d'autres comme "Bientôt disponible".

  • "Ouverte" signifie que n'importe quel développeur peut envoyer une application de cette catégorie directement en production.

  • La version bêta signifie que vous pouvez publier l'application sur des canaux internes ou fermés, mais pas en production, sauf si vous êtes accepté dans un programme d'accès anticipé.

  • La documentation de chacune de ces catégories inclut plus d'informations et un lien vers notre formulaire de participation.

  • La catégorie "Bientôt disponible" correspond aux catégories qui ne sont pas encore acceptées, mais que nous prévoyons de prendre en charge à l'avenir.

  • En fin de compte, notre objectif est d'unifier la plate-forme.

  • Nous voulons que vous puissiez créer et toucher le plus grand nombre d'utilisateurs possible en écrivant une seule fois et en distribuant à la fois sur Android Auto et Android Automotive OS, quelle que soit la catégorie.

  • Je laisse maintenant la parole à Thomas, qui va vous parler des médias.

Mises à jour de la bibliothèque d'applications multimédias pour voitures

  • Cordialement.

  • Parfait.

  • L'année dernière, nous avons donc lancé la bibliothèque d'applications pour l'automobile pour les applications multimédias dans la version 1.8, en ajoutant des UI de navigation basées sur des modèles et des actions personnalisées à Android Auto.

  • Cela incluait le modèle de lecture multimédia, visible ici à gauche.

  • Lors de la conférence I/O de cette année, nous avons présenté des interfaces utilisateur plus faciles à parcourir grâce à la bibliothèque d'applications pour voitures 1.9.

  • La version 1.9 de la bibliothèque d'applications pour voitures est désormais disponible en version bêta. Vous pouvez donc profiter de mises à jour de fonctionnalités clés sur Android Auto et Android Automotive OS.

  • Parmi les points forts, citons la personnalisation de la marque via l'expression de l'application, qui vous permet d'adapter les jetons de couleur et de forme avec des mises en page affichées par l'hôte tout en respectant les règles de sécurité, ainsi que de nouveaux composants d'interface utilisateur tels que les sections Spotlight, les éléments de liste condensés, les chips à faire défiler et un mini-lecteur persistant.

  • De plus, CAL 1.9 étend la compatibilité des modèles multimédias à AAOS, ce qui permet une véritable unification de la plate-forme sur les deux écosystèmes.

  • La prochaine version de la bibliothèque d'applications pour voitures (CAL, Car App Library) sera bientôt disponible : la version 10.

  • La version 10 de CAL proposera des modèles plus personnalisés pour les applications de communication, offrant ainsi des expériences d'appel plus robustes et personnalisées pendant la conduite.

  • Nous incluons également une nouvelle catégorie d'applications et de modèles d'applications, qui proposent des expériences conversationnelles pendant la conduite.

  • Enfin, d'autres fonctionnalités sont en cours de développement pour faciliter les transitions entre le stationnement et la conduite avec les modèles de la bibliothèque d'applications pour voiture.

  • Nous vous communiquerons prochainement plus d'informations.

Fonctionnalités de transition entre le stationnement et la conduite

  • Les fonctionnalités de stationnement et de conduite de la bibliothèque Car App permettent à votre application de changer de mode de manière dynamique et d'afficher du contenu adaptatif lorsque le véhicule est à l'arrêt, puis de revenir facilement aux modèles de la bibliothèque Car App lorsque vous conduisez.

  • Les principales applications incluent l'offre de flux d'authentification personnalisés lorsque vous êtes à l'arrêt, ou l'activation d'une expérience dédiée au stationnement, comme la diffusion de podcasts vidéo ou de clips musicaux.

  • Il s'intègre directement au modèle de lecture multimédia.

  • Ainsi, les véhicules à l'arrêt permettent aux conducteurs d'accéder pleinement à l'activité Android native de votre application, ce qui permet d'utiliser des contenus multimédias enrichis comme le streaming vidéo.

  • Dès que la voiture démarre, les protections contre les distractions s'activent. Votre application est alors invitée à revenir au modèle multimédia de la bibliothèque d'applications pour voitures afin de maintenir une écoute audio conforme et ininterrompue.

  • Nous sommes à un tournant décisif pour les expériences embarquées.

  • Les applications multimédias veulent aller au-delà des interfaces de navigation et de lecture traditionnelles pour offrir des moments plus riches, plus immersifs et plus interactifs aux conducteurs et aux passagers.

  • Nous allons maintenant voir un exemple d'ajout d'une activité vidéo native à l'aide de la bibliothèque Media3 pour lancer la lecture lorsque la voiture passe en mode Parking.

  • Pour commencer, vous allez connecter une surface de rendu vidéo directement à votre instance de lecture en arrière-plan.

    override fun onStart() {
           super.onStart()
           ...
           controllerFuture = MediaController.Builder(
             this,
             sessionToken
           ).buildAsync()
    
           controllerFuture?.addListener({
               mediaController = controllerFuture?.get()
               playerView.player = mediaController
           }, ContextCompat.getMainExecutor(this))
    }
  • Vous voulez éviter d'instancier un lecteur multimédia distinct dans cette activité. À la place, vous souhaitez conserver un ExoPlayer ou un lecteur multimédia central dans votre service principal, comme un service de bibliothèque multimédia Media3, qui gère à la fois les flux audio et vidéo.

  • Ainsi, pendant le trajet, lorsqu'aucun service actif n'est lié, le lecteur ne décode que l'audio. En revanche, lorsque les conducteurs ouvrent votre activité vidéo une fois garés, vous devez associer sa surface d'affichage directement au lecteur de service sous-jacent.

  • Avec Media3, mediaController implémente le lecteur de manière native, ce qui permet une attribution directe, comme vous le voyez ici, playerView défini-- playerView.player défini directement sur mediaController.

  • Ensuite, vous devez enregistrer votre point d'entrée natif à l'aide de ParkedOnlyOnClickListener.

    val watchVideoAction = Action.Builder()
      .setTitle("Watch Video")
      .setIcon(videoCarIcon)
      .setOnClickListener(
        ParkedOnlyOnClickListener.create {
          val intent = Intent(
            carContext,
            VideoPlayerActivity::class.java
          )
            .apply {
              addFlags(
                Intent.FLAG_ACTIVITY_NEW_TASK
              )
            }
          carContext.startActivity(intent)
        })
      .build()
  • Ce wrapper fournit un déclencheur d'intent dans la barre d'en-tête de votre interface de lecture multimédia.

  • Nous allons donc inclure une action pour lancer la lecture de la vidéo, en encapsulant son écouteur de sélection dans un ParkedOnlyOnClickListener.

  • En mode Conduite, ces appuis sont donc interceptés par l'application hôte, qui affiche un message de sécurité du système. Vous ne pourrez donc pas accéder à cet écran lorsque vous conduisez, mais lorsque vous êtes garé, le rappel déclenche le startActivity dans carContext pour lancer l'activité plein écran désignée.

  • N'oubliez pas que dans ces applications de la bibliothèque d'applications pour voitures, vous devez signaler votre cible vidéo comme distractionOptimized=false dans le fichier manifeste afin que le système d'exploitation reconnaisse qu'il s'agit d'un workflow uniquement pour les véhicules à l'arrêt.

    <activity
       android:name=".VideoPlayerActivity"
       android:exported="false"
       android:launchMode="singleTop">
       <meta-data
           android:name="distractionOptimized"
           android:value="false" />
    </activity>

Gérer les transitions entre le stationnement et la conduite

  • Enfin, voyons ce qui se passe lorsque le conducteur passe de la position de stationnement à la position de conduite.

  • Si l'activité n'est pas optimisée pour éviter les distractions et qu'elle reste active lorsque la voiture se déplace, AAOS affiche une superposition de blocage du système qui vous indique, en gros, de vous garer pour continuer à utiliser l'application.

  • Pour éviter cet écran bloqué, notre objectif est de revenir de manière fluide au modèle de lecture multimédia sans interrompre l'audio.

  • Ainsi, lorsque isRequiresDistractionOptimization est évalué comme "true" ici, nous allons essentiellement effacer la surface de rendu vidéo de votre session multimédia sous-jacente et appeler "finish" sur l'activité du lecteur, car elle a été lancée par-dessus votre expérience CAL. Le fait de la terminer renvoie directement à votre modèle de lecture multimédia et poursuit la lecture audio.

    class VideoPlayerActivity : ComponentActivity(){
      override fun onStart() {
    
        …
    
        if (uxRestrictionsManager?
            .currentCarUxRestrictions?
            .isRequiresDistractionOptimization
                == true) {
          revertToCarAppTemplate()
        }
      }
    
      private fun revertToCarAppTemplate() {
        mediaControllerCompat
          .sendCommand("CMD_CLEAR_VIDEO_SURFACE",
                       null, null)
        finish()
      }
    }
  • La lecture audio ininterrompue est essentielle pour offrir une expérience utilisateur de qualité. En maintenant votre session multimédia active en tant que service de premier plan, le son continue de manière fluide lors de ces changements d'état.

    <activity
            android:name="androidx.car.app.activity.CarAppActivity"
            android:exported="true"
            android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
    
            <action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
        </intent-filter>
        <meta-data
                android:name="distractionOptimized"
                android:value="true" />
    </activity>
  • Vous devez également remplacer onNewIntent sur l'écran CAL pour capturer les intents SHOW_MEDIA_PLAYBACK.

    class MyCarAppSession : Session() {
        override fun onCreateScreen(intent: Intent): Screen {
            // 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
            val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
            mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
    
            // 2. Handle deep link if cold-started from the vehicle's media widget
            handlePlaybackIntent(intent)
            return HomeScreen(carContext)
        }
        override fun onNewIntent(intent: Intent) {
            super.onNewIntent(intent)
    
            // 3. Handle deep link when the session is already running
            handlePlaybackIntent(intent)
        }
    }
  • Ainsi, chaque fois que les utilisateurs interagissent avec un widget multimédia du système du véhicule sur l'écran d'accueil de la voiture, le lien profond les redirige directement vers la vue "En écoute" dans la bibliothèque d'applications pour voiture.

  • Il est donc très simple de valider ces transitions tout au long du processus de développement.

  • Vous pouvez exécuter des commandes adb sur AAOS.

  • Dans ce cas, il s'agirait de emulate-driving-state drive ou de emulate-driving-state park lorsque vous êtes prêt à revenir à l'activité précédente.

  • Voici un exemple d'utilisation de notre nouvelle application multimédia Media3 exemple qui utilise la bibliothèque d'applications pour voiture avec la lecture vidéo en mode Parking et en mode Conduite.

  • Vous pourrez bientôt découvrir cette fonctionnalité sur notre stand Android adaptatif au rez-de-chaussée et dans notre dépôt GitHub car-samples.

  • Les fonctionnalités de stationnement sont actuellement disponibles sur Android Automotive OS pour les applications multimédias qui ont déjà intégré la bibliothèque d'applications pour voiture (CAL) pour l'expérience de conduite, où elles peuvent désormais proposer des expériences plus complètes lorsque le véhicule est garé.

  • Consultez notre documentation sur developer.android.com pour en savoir plus et indiquez-nous si vous souhaitez l'intégrer à votre application.

  • Paul.

Nouveautés de la bibliothèque d'applications pour voiture

  • Parfait.

  • Merci, Thomas.

  • Avant de conclure, j'aimerais vous présenter quelques moyens d'en savoir plus sur les nouveautés à venir cette année.

  • Comme Thomas l'a mentionné, CAL 1.9 est actuellement en version alpha.

  • Elle passera très bientôt en version bêta.

  • Ensuite, CAL 1.10 entrera en phase alpha avant la fin de l'année. Vous pourrez ainsi commencer à évaluer les interfaces utilisateur conversationnelles, ainsi que les dernières fonctionnalités de communication et de passage de la position de stationnement à la conduite.

  • Enfin, comme je l'ai mentionné, nous sommes ravis de vous annoncer que les jeux sont disponibles sur Android Auto et Android Automotive OS. C'est donc le moment idéal pour optimiser vos jeux pour les voitures.

  • Pour en savoir plus sur l'implémentation, consultez la documentation du guide "Créer des jeux pour les voitures".

  • Pour en savoir plus sur la façon d'adapter vos jeux pour les voitures et suivre les nouveautés et les changements d'Android pour les voitures, consultez notre page "Nouveautés".

  • Nous espérons que vous avez compris que les voitures et leurs utilisateurs sont prêts pour vos applications.

  • Vous pouvez vous appuyer sur vos applications adaptatives existantes pour proposer des expériences riches lorsque le véhicule est à l'arrêt, et utiliser différents modèles de la bibliothèque d'applications pour voitures afin de créer des expériences optimisées pour une conduite en toute sécurité.

  • Avant de publier, vous pouvez effectuer des tests approfondis à l'aide de l'unité principale pour ordinateur, des émulateurs, d'AAOS exécuté sur une Pixel Tablet ou de Firebase Test Lab.

  • Vous disposez déjà des compétences nécessaires pour développer des applications pour cet écosystème, et des millions de voitures attendent vos applications. Alors, mettons-nous en route !

Code

Extraits de code

Extrait de code shell à 09:03 dans "Développer des applications pour les voitures à l'arrêt"
android skills list
android skills add android-for-cars-parked-apps
Extrait Kotlin à 15:20 dans "Fonctionnalités de stationnement et de conduite"
override fun onStart() {
       super.onStart()
       ...
       controllerFuture = MediaController.Builder(
         this,
         sessionToken
       ).buildAsync()

       controllerFuture?.addListener({
           mediaController = controllerFuture?.get()
           playerView.player = mediaController
       }, ContextCompat.getMainExecutor(this))
}
Extrait Kotlin à 16:06 dans "Fonctionnalités de stationnement et de conduite"
val watchVideoAction = Action.Builder()
  .setTitle("Watch Video")
  .setIcon(videoCarIcon)
  .setOnClickListener(
    ParkedOnlyOnClickListener.create {
      val intent = Intent(
        carContext,
        VideoPlayerActivity::class.java
      )
        .apply {
          addFlags(
            Intent.FLAG_ACTIVITY_NEW_TASK
          )
        }
      carContext.startActivity(intent)
    })
  .build()
Extrait XML à 16:42 dans "Fonctionnalités de passage de la position de stationnement à la conduite"
<activity
   android:name=".VideoPlayerActivity"
   android:exported="false"
   android:launchMode="singleTop">
   <meta-data
       android:name="distractionOptimized"
       android:value="false" />
</activity>
Extrait de code Kotlin à 17:17 dans "Gérer les transitions entre le stationnement et la conduite"
class VideoPlayerActivity : ComponentActivity(){
  override fun onStart() {

    …

    if (uxRestrictionsManager?
        .currentCarUxRestrictions?
        .isRequiresDistractionOptimization
            == true) {
      revertToCarAppTemplate()
    }
  }

  private fun revertToCarAppTemplate() {
    mediaControllerCompat
      .sendCommand("CMD_CLEAR_VIDEO_SURFACE",
                   null, null)
    finish()
  }
}
Extrait XML à 17:36 dans "Gérer les transitions entre le stationnement et la conduite"
<activity
        android:name="androidx.car.app.activity.CarAppActivity"
        android:exported="true"
        android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />

        <action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
    </intent-filter>
    <meta-data
            android:name="distractionOptimized"
            android:value="true" />
</activity>
Extrait Kotlin à 17:49 dans "Gérer les transitions entre le stationnement et la conduite"
class MyCarAppSession : Session() {
    override fun onCreateScreen(intent: Intent): Screen {
        // 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
        val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
        mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)

        // 2. Handle deep link if cold-started from the vehicle's media widget
        handlePlaybackIntent(intent)
        return HomeScreen(carContext)
    }
    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)

        // 3. Handle deep link when the session is already running
        handlePlaybackIntent(intent)
    }
}