Actions dans les applications pour voitures

Les commandes vocales permettent aux conducteurs d'effectuer des tâches sans lâcher le volant ni quitter la route des yeux. Grâce aux actions dans les applications pour voitures, les conducteurs peuvent utiliser l'Assistant Google pour contrôler les applications Android sur leur système d'infoloisirs en disant, par exemple, "Hey Google, trouve-moi une place de parking dans la rue sur l'appli XXX".

Les actions dans les applications fonctionnent avec les applications de point d'intérêt (POI) pour voitures. Ce guide décrit les exigences et les limites spécifiques à l'intégration des actions dans une application POI.

Fonctionnement

Les actions dans les applications permettent d'intégrer l'Assistant à votre application. Les utilisateurs peuvent ainsi accéder aux fonctionnalités de votre application par commande vocale. Lorsqu'un utilisateur appelle une action dans une application, l'Assistant associe cette requête à un intent intégré déclaré dans la ressource shortcuts.xml de votre application, puis lance votre application sur l'écran demandé.

Pour déclarer la compatibilité des intents intégrés dans votre application, utilisez les éléments Android capability. Lorsque vous importerez votre application via la Google Play Console, Google enregistrera les fonctionnalités déclarées dans votre application et les rendra accessibles aux utilisateurs depuis l'Assistant.

Graphique illustrant le processus recherche d'une station de rechage pour une voiture

  1. Un utilisateur déclenche l'Assistant et demande une application spécifique via une commande vocale.
  2. L'Assistant associe cette requête à un modèle pré-entraîné (intent intégré) et extrait tous les paramètres pris en charge par cet intent.
  3. Dans cet exemple, l'Assistant associe la requête à l'intent intégré GET_CHARGING_STATION, extrait le paramètre de localisation "SFO" et convertit le lieu en coordonnées géographiques.
  4. L'application est déclenchée via sa définition de traitement pour cet intent intégré.
  5. L'application gère le traitement et affiche les options de la borne de recharge dans le système d'infoloisirs du conducteur.

Limites

Les implémentations d'actions dans une application pour voitures présentent les limites suivantes :

Conditions requises

Pour permettre l'intégration d'actions dans une application pour voitures, procédez comme suit :

Déterminer l'intent et le traitement

La première étape pour activer les commandes vocales afin de permettre des actions dans une application pour voitures consiste à déterminer les commandes vocales ou les intents utilisateur que votre application accepte. Vous devez ensuite définir un traitement pour chaque intent afin de spécifier comment votre application doit répondre à la requête.

  • Quels intents sont compatibles avec l'application pour voitures ?

    Les actions dans l'application fournissent des modèles vocaux pré-entraînés, appelés intents intégrés, qui peuvent comprendre et interpréter les commandes vocales d'un utilisateur lorsqu'il dit "Hey Google". Pour répondre à des requêtes vocales, il vous suffit de déclarer à l'Assistant les intents intégrés pris en charge par votre application. Par exemple, si vous souhaitez que votre application puisse vous aider à trouver un parking, vous devez implémenter l'intent intégré GET_PARKING_FACILITY. Vous pouvez également implémenter l'intent intégré GET_CHARGING_STATION pour aider les utilisateurs à trouver des bornes de recharge pour voitures électriques.

  • Comment votre application doit-elle traiter chaque intent ?

    Votre application traite la requête vocale en s'ouvrant sur l'écran approprié. Les actions dans l'application fournissent au traitement les paramètres extraits de la requête, ce qui vous permet d'adapter votre réponse aux besoins de l'utilisateur.

Intégrer des actions dans une application

Une fois que vous avez déterminé votre stratégie de traitement, procédez comme suit pour activer les commandes vocales dans votre application pour voitures :

  1. Ouvrez votre activité principale AndroidManifest.xml et déclarez la prise en charge des raccourcis Android. Vous utiliserez des éléments de raccourci capability pour déclarer à l'Assistant les intents intégrés compatibles avec votre application. Pour en savoir plus, consultez la section Ajouter des fonctionnalités.

     <!-- AndroidManifest.xml -->
     <meta-data
         android:name="android.app.shortcuts"
         android:resource="@xml/shortcuts" />
    
  2. Ajoutez ensuite un élément <intent-filter> à AndroidManifest.xml. Cette opération permettra à l'Assistant d'utiliser des liens profonds pour se connecter au contenu de votre application.

    • Pour le traitement Android Auto, le <intent-filter> est identique à votre application mobile.

    • Pour Android Automotive OS, la session CarAppService de votre application déclenchera l'Assistant. Pour autoriser une session à déclencher votre lien profond, spécifiez un <intent-filter> dans l'élément <activity> du fichier AndroidManifest.xml.

    <!-- AndroidManifest.xml -->
    <activity
      ...
      android:name="androidx.car.app.activity.CarAppActivity">
      ...
      <intent-filter>
          <action android:name="android.intent.action.VIEW" />
          <category android:name="android.intent.category.DEFAULT" />
          <category android:name="android.intent.category.BROWSABLE" />
          <data
            android:scheme="YOUR_SCHEME"
            android:host="YOUR_HOST" />
      </intent-filter>
    </activity>
    
  3. Si vous n'avez pas encore de fichier shortcuts.xml dans le répertoire res/xml de votre application, créez-en un. Pour découvrir comment les actions dans l'application utilisent les raccourcis Android, consultez la section Créer un fichier shortcuts.xml.

    Dans shortcuts.xml, implémentez un capability pour l'intent intégré de votre choix. Ensuite, ajoutez un <intent> imbriqué pour définir le traitement de l'application.

    <!-- shortcuts.xml -->
    <?xml version="1.0" encoding="utf-8"?>
    <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    
      <capability android:name="actions.intent.GET_PARKING_FACILITY">
        <intent>
          <url-template
          android:value="YOUR_SCHEME://YOUR_HOST{?name,address,disambiguatingDescription,latitude,longitude}">
    
          <!-- Facility name, e.g. "Googleplex" -->
          <parameter
            android:name="parkingFacility.name"
            android:key="name"/>
          <!-- Address, e.g. "1600 Amphitheatre Pkwy, Mountain View, CA 94043" -->
          <parameter
            android:name="parkingFacility.address"
            android:key="address"/>
          <!-- Disambiguate the type of service, e.g. "valet" -->
          <parameter
            android:name="parkingFacility.disambiguatingDescription"
            android:key="disambiguatingDescription"/>
          <!-- Latitude, e.g. "37.3861" -->
          <parameter
            android:name="parkingFacility.geo.latitude"
            android:key="latitude"/>
          <!-- Longitude, e.g. "-122.084" -->
          <parameter
            android:name="parkingFacility.geo.longitude"
            android:key="longitude"/>
        </intent>
      </capability>
    </shortcuts>
    
  4. Enfin, mettez à jour la logique Session() de votre application pour voitures pour gérer le traitement des actions entrantes dans votre application. Les exemples suivants illustrent la gestion des intents pour Session.onCreateScreen() et Session.onNewIntent().

    onCreateScreen()

    Kotlin

    @Override
    fun onCreateScreen(@NonNull intent: Intent): Screen {
      if (intent.getData() != null) {
          val uri: Uri = intent.getData()
          // uri = "YOUR_SCHEME://YOUR_HOST?name=Levis%20center"
          // Build your Templates with parsed uri parameters
      ...
     }
    }

    Java

    @Override
    public Screen onCreateScreen(@NonNull Intent intent) {
    if (intent.getData() != null) {
      Uri uri = intent.getData();
      // uri = "YOUR_SCHEME://YOUR_HOST?name=Levis%20center"
      // Build your Templates with parsed uri parameters
    ...
    }
    }

    onNewIntent()

    Kotlin

    @Override
    fun onNewIntent(@NonNull intent: Intent): Screen {
      if (intent.getData() != null) {
          val uri: Uri = intent.getData()
          // uri = "YOUR_SCHEME://YOUR_HOST?name=Levis%20center"
          // Build your Templates with parsed uri parameters
          ...
      }
    }

    Java

    @Override
    public void onNewIntent(@NonNull Intent intent) {
    if (intent.getData() != null) {
     Uri uri = intent.getData();
     // uri = "YOUR_SCHEME://YOUR_HOST?name=Levis%20center"
     // Build your Templates with parsed uri parameters
     ...
    }
    }

Prévisualiser, tester et publier votre application

Les actions dans l'application vous permettent de prévisualiser et de tester votre application. Pour en savoir plus sur ces outils et sur la publication dans le Play Store de votre application pour voitures compatible avec les commandes vocales, consultez la présentation des actions dans les applications.