La sélection de l'VIA active est effectuée par ManageAssistActivity
dans CarSettings. Ce flux est déclenché par l'application PackageInstaller
, dans la section "Applications par défaut" de 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:
- Dans le cadre du service système
RolesManager
- Par le
VoiceInteractionManagerService
via l'API interneAssistUtils
.
Vous pouvez obtenir une liste des VIA candidates à l'aide de RolesManager
avec le nom de rôle android.app.role.ASSISTANT
.
Déclenchement par mot clé
Android fournit AlwaysOnHotwordDetector comme abstraction au-dessus du DSP matériel. Cela permet d'associer facilement un VoiceInteractionService
à un modèle vocal pour la reconnaissance vocale toujours activée à faible consommation d'énergie. Il s'agit du flux d'interaction le plus courant et le plus connu, où 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
.
Figure 2. Déclenchement par mot clé
Légende. Les services système s'affichent en bleu clair, et les composants VIA en vert.
Déclenchement du mode PTT
Cela s'applique à une pression longue ou courte sur un bouton physique. Dans AAOS, la PTT est gérée par CarInputService. Dans une implémentation par défaut, ce service gère les événements d'entrée reçus via le HAL du véhicule. Dans le cas particulier de l'interaction vocale, il applique la logique suivante aux événements de touche:
- Les événements PTT courts (
KeyEvent.KEYCODE_VOICE_ASSIST
) sont dirigés versVoiceInteractionManagerService
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
.
Figure 3. Déclenchement du mode PTT
Pour intégrer un bouton de commande vocale matérielle à AAOS, consultez l'intégration de la saisie au clavier pour voitures.
Déclenchement du mode "Appuyer pour parler" (ou bouton logiciel)
Le déclenchement de l'interaction vocale à partir de l'UI du système se fait à l'aide d'AssistUtil. Il s'agit d'une API système masquée qui ne peut être utilisée que par des applications système groupées telles que l'UI système, qui permet les éléments suivants:
- Interagir avec
VoiceInteractionManagerService
pour lancer des sessions de commande vocale - Déterminez le VIA actuellement sélectionné.
Pour présenter de manière dynamique l'application VIA sélectionnée, l'UI du système peut utiliser RoleManager
et suivre les modifications apportées au titulaire du rôle pour ROLE_ASSISTANT
.
Vous trouverez un exemple d'implémentation du déclenchement du TTT dans CarSystemUI, AssistantButton
.
Figure 4. Déclenchement de la fonctionnalité Appuyer pour parler
Lecture à voix haute avec l'assistant vocal
Dans Automotive, les notifications publiées dans le centre de notifications identifiées comme notificationsINBOX
ou INBOX_IN_GROUP
(par exemple, les messages SMS) incluent un bouton d'action "Lire", qui permet à l'utilisateur de faire lire les notifications à voix haute par le VIA sélectionné et, éventuellement, de répondre par commande vocale.
Figure 5. Notifications
Pour en savoir plus sur l'implémentation de ce flux, consultez la section 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 lanceur d'applications dans leur fichier manifeste. C'est au développeur de l'application et à l'OEM qui accepte de préinstaller cette application de décider de la nature de ces activités.
Important Dans Automotive, toutes les activités, y compris les activités système, sont soumises à des restrictions d'expérience utilisateur 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 d'autorisation (si vous êtes un OEM) ou annotez l'activité avec des métadonnées distractionOptimized
. Pour en savoir plus, consultez les consignes concernant les distractions du conducteur.
DSP et HAL audio
Veillez à consulter les consignes mises à jour concernant l'enregistrement audio toujours activé et le HAL audio sur la page Capture simultanée. L'accès à ces API peut avoir un impact significatif sur les performances de la détection des mots clés, comme expliqué dans la section Répondre aux mots clés.
Autorisations
Accorder des autorisations système
Étant donné que l'utilisateur ne peut pas accorder d'autorisations privilégiées, 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. Consultez la section 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 la liste d'autorisation des droits 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>
Autorisations dangereuses pré-accordées
Comme indiqué dans la section Demander des autorisations, VIA nécessite le consentement de l'utilisateur pour accéder à certaines fonctionnalités. Certaines de ces autorisations sont accordées à l'VoiceInteractionService
par défaut (voir DefaultPermissionGrantPolicy.java
). Pour en savoir plus sur les autorisations des gestionnaires par défaut, consultez la section Autorisations utilisées uniquement dans les gestionnaires par défaut. Il est également possible d'accorder des autorisations à l'avance à l'aide du fichier de configuration default-permissions.xml
. Pour en savoir plus sur les restrictions concernant l'octroi préalable d'autorisations, consultez la section 9 du
Document de définition de la compatibilité (CDD) Android.
Important Dans tous les cas, seules les autorisations par défaut sont accordées à l'avance. Si le système comporte plusieurs VIA préchargés, le VIA non par défaut doit demander explicitement des autorisations à l'utilisateur lors 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 se trouver dans les partitions et les dossiers /product/priv-apps
ou /vendor/priv-apps
(pour en savoir plus sur les partitions, consultez la page Présentation des partitions et Créer des partitions de produits).
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 système @hide. Selon l'emplacement des applications préinstallées, les mises à jour peuvent être effectuées par OTA (voir la section Mises à jour OTA) ou via des mises à jour d'applications à partir d'une plate-forme de téléchargement d'applications.
Personnalisation
Comme indiqué dans la section Concepts spécifiques au secteur automobile, la cohérence et la personnalisation de l'UI/UX sont plus importantes dans le secteur automobile que dans tout autre facteur de forme. Pour une interopérabilité maximale, nous vous recommandons vivement d'utiliser la bibliothèque d'UI pour voitures d'AAOS. Cette bibliothèque comprend des composants et des ressources pouvant être intégrés aux applications automobiles conçues pour être personnalisées par les OEM. De cette manière, un seul APK peut être créé de sorte que son UI puisse être personnalisée en fonction de la conception de chaque modèle de voiture.