Flux d'intégration

La sélection du VIA actif se fait par ManageAssistActivity dans CarSettings. Ce flux est déclenché par l'application PackageInstaller , dans le cadre de la section Applications par défaut de l'écran Paramètres.

Applications par défaut sur l'écran Paramètres

Figure 1. Applications par défaut sur l'écran Paramètres

Le VIA sélectionné est exposé au système de deux manières :

  1. Dans le cadre du service système RolesManager
  2. Par VoiceInteractionManagerService via l’API interne AssistUtils .

Une liste de VIA candidats peut être obtenue à l'aide RolesManager avec le nom de rôle android.app.role.ASSISTANT .

Déclenchement de mots clés

Android fournit AlwaysOnHotwordDetector comme abstraction au-dessus du DSP matériel. Cela constitue un moyen pratique d’associer un VoiceInteractionService à un modèle vocal pour une reconnaissance vocale toujours active à faible consommation. Il s'agit du flux d'interaction le plus courant et le plus connu, dans lequel l'utilisateur demande à interagir avec une application vocale (VA) pour lancer une nouvelle conversation. Les sessions vocales démarrées de cette manière sont identifiées par SHOW_SOURCE_ASSIST_GESTURE flag .

Déclenchement de mots clés

Figure 2. Déclenchement de mots clés

Légende. Les services système apparaissent en bleu clair, les composants VIA en vert.

Déclenchement PTT

Cela s’applique à une pression longue ou courte sur un bouton matériel. Dans AAOS, PTT est géré par CarInputService . Dans une implémentation par défaut, ce service gère les événements d'entrée reçus via le Vehicle HAL, et dans le cas particulier d'une interaction vocale, il applique la logique suivante aux événements clés :

  • Les événements PTT courts ( KeyEvent.KEYCODE_VOICE_ASSIST ) sont dirigés vers VoiceInteractionManagerService pour démarrer une nouvelle session vocale.
  • Les événements PTT longs sont d'abord transmis aux récepteurs de projection (par exemple, Android Auto ou CarPlay), puis aux appareils connectés via Bluetooth et enfin à l'application VIA locale.

Les sessions démarrées à l'aide de ce flux sont identifiées par SHOW_SOURCE_PUSH_TO_TALK .

Déclenchement PTT

Figure 3. Déclenchement PTT

Pour intégrer un bouton de commande vocale matériel à AAOS, voir Intégration de l'entrée de clé automobile .

Déclenchement Tap-to-Talk (ou bouton logiciel)

Le déclenchement de l'interaction vocale à partir de l'interface utilisateur du système se fait à l'aide de AssistUtil . Il s'agit d'une API système cachée qui ne peut être utilisée que par les applications système groupées telles que l'interface utilisateur système qui permet :

  • Interagir avec VoiceInteractionManagerService pour démarrer des sessions de commande vocale.
  • Déterminez quel est le VIA actuellement sélectionné.

Pour présenter dynamiquement l'application VIA sélectionnée, l'interface utilisateur du système peut utiliser RoleManager et suivre les modifications apportées au titulaire du rôle pour ROLE_ASSISTANT . Un exemple de la façon d'implémenter le déclenchement TTT peut être trouvé dans CarSystemUI, AssistantButton .

Déclenchement Tap-to-Talk

Figure 4. Déclenchement Tap-to-Talk

Assistant vocal Tap-to-Read (TTR)

Dans l'automobile, les notifications publiées dans le centre de notifications identifiées comme notifications INBOX ou INBOX_IN_GROUP (par exemple, les messages SMS) incluent un bouton d'action Lire, qui permet à l'utilisateur de faire lire les notifications à haute voix par le VIA sélectionné et, éventuellement, de répondre vocalement.

Notifications

Figure 5. Notifications

Pour plus d'informations sur la façon d'implémenter ce flux, consultez Gérer les commandes de messagerie .

Lancer VIA depuis le lanceur de voiture

Comme toute autre application, les VIA peuvent inclure une ou plusieurs activités de lancement dans leur manifeste. Il appartient au développeur de l'application et à l'OEM qui accepte de préinstaller cette application de décider de l'effet de ces activités.

Important. Dans l'automobile, toutes les activités, y compris les activités système, sont soumises à des restrictions UX pendant la conduite. Si l'expérience que vous souhaitez activer à partir d'une icône de lanceur doit être disponible pendant la conduite, ajoutez-la à la liste verte (si vous êtes un OEM) ou annotez l'activité avec des métadonnées distractionOptimized . Pour plus d'informations, consultez Directives sur la distraction du conducteur .

DSP et HAL audio

Assurez-vous de consulter les directives mises à jour concernant l'enregistrement audio simultané permanent et l'audio HAL sur Capture simultanée . L'accès à ces API peut avoir un impact significatif sur les performances de détection des mots clés, comme expliqué dans Répondre aux mots clés .

Autorisations

Accorder des autorisations privilégiées au système

Étant donné que l'utilisateur ne peut pas accorder d'autorisation privilégiée, si un VIA en a besoin, les OEM doivent précharger leur APK dans leurs images système et accorder ces autorisations explicitement dans leurs builds. Voir Demander des autorisations .

Pour ce faire, ajoutez une dépendance de liste d'autorisation de privilèges à votre projet :

Android.bp

android_app {
     ...
     required: ["privapp_allowlist_com.example.myvoicecontrol"],
     ...
}

Ajoutez le fichier d'autorisation de liste blanche de privilèges système au dossier yourdata/etc/car :

vendor/…/data/etc/car/Android.bp

prebuilt_etc {
    name:privapp_allowlist_com.example.myvoicecontrol",
    sub_dir: "permissions",
    src: "com.example.myvoicecontrol.xml",
    filename_from_src: true,
}

vendor/…/data/etc/car/com.example.myvoicecontrol.xml

<?xml version="1.0" encoding="utf-8"?>
<permissions>
    <privapp-permissions package="com.android.car.voicecontrol">
        <permission name="android.permission.MEDIA_CONTENT_CONTROL"/>
    </privapp-permissions>
</permissions>

Pré-octrois d'autorisations dangereuses

Comme indiqué dans Demander des autorisations , VIA nécessite le consentement de l'utilisateur pour accéder à certaines fonctionnalités. Certaines de ces autorisations sont accordées au préalable au VoiceInteractionService par défaut (voir DefaultPermissionGrantPolicy.java ). Pour plus d'informations sur les autorisations des gestionnaires par défaut, consultez Autorisations utilisées uniquement dans les gestionnaires par défaut . Il est également possible de pré-accorder des autorisations à l'aide du fichier de configuration default-permissions.xml . Pour plus de détails sur les restrictions concernant l'octroi préalable d'autorisations, consultez la section 9 du document de définition de compatibilité Android (CDD) .

Important. Dans tous les cas, seul le VIA par défaut disposerait de ces autorisations pré-accordées. Si le système dispose de plusieurs VIA préchargés, le VIA autre que celui par défaut doit demander explicitement des autorisations à l'utilisateur dans le cadre de sa configuration ou lors de la première utilisation.

Distribution (préinstallation et déploiement des mises à jour)

Les VIA préinstallés doivent résider sous les partitions et dossiers /product/priv-apps ou /vendor/priv-apps (pour en savoir plus sur les partitions, consultez Présentation des partitions et Créer des partitions de produit ).

Dans le second cas, étant donné que la partition du fournisseur peut être mise à jour séparément du système, les applications hébergées ici ne pourront pas accéder aux API du système @hide. En fonction de l'emplacement des applications préinstallées, les mises à jour peuvent être effectuées sous forme d'OTA (voir Mises à jour OTA ) ou via des mises à jour d'applications depuis un magasin d'applications.

Personnalisation

Comme mentionné dans Concepts spécifiques à l'automobile , la cohérence et la personnalisation de l'UI/UX sont plus importantes dans l'automobile que dans tout autre facteur de forme. Pour une interopérabilité maximale, l'utilisation de la bibliothèque AAOS Car UI est fortement recommandée. Cette bibliothèque comprend des composants et des ressources pouvant être intégrés dans des applications automobiles conçues pour être personnalisées par les constructeurs OEM. De cette façon, un seul APK peut être construit de manière à ce que son interface utilisateur puisse être personnalisée en fonction du design de chaque modèle de voiture.