La selección de la VIA activa se realiza con ManageAssistActivity en CarSettings. Este flujo se activa con la app de PackageInstaller, como parte de la sección Apps predeterminadas de la pantalla Configuración.

Figura 1: Apps predeterminadas en la pantalla Configuración
La VIA seleccionada se expone al sistema de dos maneras:
- Como parte del
RolesManagerservicio del sistema - Con
VoiceInteractionManagerServicea través de la API internaAssistUtils
Se puede obtener una lista de VIAs candidatas con RolesManager
con el nombre de rol android.app.role.ASSISTANT.
Activación de palabras clave
Android proporciona AlwaysOnHotwordDetector
como una abstracción sobre el DSP de hardware. Esto proporciona una manera conveniente de asociar un VoiceInteractionService a un modelo de voz para el reconocimiento de voz de baja energía siempre activo. Este es el flujo de interacción más común y conocido, en el que el usuario solicita interactuar con una aplicación de voz (VA) para iniciar una conversación nueva. Las sesiones de voz que se inician de esta manera se identifican con la marca SHOW_SOURCE_ASSIST_GESTURE flag.
Figura 2: Activación de palabras clave
Leyenda Los servicios del sistema aparecen en azul claro y los componentes de VIA en verde.
Activación de PTT
Esto se aplica a una presión larga o corta del botón de hardware. En AAOS, CarInputService controla el PTT. En una implementación predeterminada, este servicio controla los eventos de entrada recibidos a través de HAL del vehículo y, en el caso particular de la interacción por voz, aplica la siguiente lógica a los eventos clave:
- Los eventos PTT cortos (
KeyEvent.KEYCODE_VOICE_ASSIST) se dirigen aVoiceInteractionManagerServicepara iniciar una nueva sesión de voz. - Los eventos PTT largos se entregan primero a los receptores de proyección (por ejemplo, Android Auto o CarPlay), luego a los dispositivos conectados por Bluetooth y, por último, a la app de VIA local.
Las sesiones que se inician con este flujo se identifican con SHOW_SOURCE_PUSH_TO_TALK.

Figura 3: Activación de PTT
Para integrar un botón de control por voz de hardware a AAOS, consulta Integración de entrada de clave automotriz.
Activación de Presiona para hablar (o botón de software)
La interacción por voz de activación desde la IU del sistema se realiza con AssistUtil. Esta es una API del sistema oculta que solo pueden usar las apps del sistema agrupadas, como la IU del sistema que habilita lo siguiente:
- Interactuar con
VoiceInteractionManagerServicepara iniciar sesiones de control por voz - Determinar cuál es la VIA seleccionada actualmente
Para presentar de forma dinámica la app de VIA seleccionada, la IU del sistema puede usar
RoleManager
y seguir los cambios en el titular del rol para ROLE_ASSISTANT.
Se puede encontrar un ejemplo de cómo implementar la activación de TTT en CarSystemUI, AssistantButton.

Figura 4: Activación de Presiona para hablar
Presiona para leer (TTR) del asistente por voz
En Automotive, las notificaciones publicadas en el Centro de notificaciones identificadas comoINBOX o INBOX_IN_GROUP notificaciones (por ejemplo, mensajes SMS)
incluyen un botón de acción Reproducir, que permite que el usuario haga que la VIA seleccionada lea las notificaciones en voz alta
y, de manera opcional, responda por voz.

Figura 5: Notificaciones
Para obtener más información sobre cómo implementar este flujo, consulta Controla los comandos de mensajería.
Cómo iniciar la VIA desde el selector del auto
Al igual que cualquier otra app, las VIAs pueden incluir una o más actividades de selector en su manifiesto. Depende del desarrollador de apps y del OEM que acepte la preinstalación de esta app decidir qué harían estas actividades.
Importante: En Automotive, todas las actividades, incluidas las del sistema, están sujetas a restricciones de UX mientras se conduce. Si la experiencia que deseas
habilitar desde un ícono del selector debe estar disponible mientras se conduce, agrégala a la
lista de entidades permitidas (si eres un OEM) o anota la actividad con distractionOptimized
metadatos. Para obtener más información, consulta los
Lineamientos para evitar la distracción del conductor.
DSP y HAL de audio
Asegúrate de revisar los lineamientos actualizados sobre la grabación de audio siempre activa y simultánea y el HAL de audio en Captura simultánea. El acceso a estas APIs puede tener un impacto significativo en el rendimiento de la detección de palabras clave como se explica en Cómo responder a las palabras clave.
Permisos
Cómo otorgar permisos con privilegios del sistema
Dado que el usuario no puede otorgar permisos con privilegios, si una VIA necesita alguno de ellos, los OEMs deben cargar previamente su APK en sus imágenes del sistema y otorgar esos permisos de forma explícita en sus compilaciones. Consulta Solicita permisos.
Para ello, agrega una dependencia de lista de entidades permitidas de privilegios a tu proyecto:
Android.bp
android_app {
...
required: ["privapp_allowlist_com.example.myvoicecontrol"],
...
}Agrega el archivo de permisos de la lista de entidades permitidas de privilegios del sistema a la carpeta 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>
Permisos peligrosos otorgados previamente
Como se indica en
Solicita
permisos, la VIA requiere el consentimiento del usuario para acceder a ciertas funcionalidades. Algunos de estos
permisos se otorgan previamente al VoiceInteractionService predeterminado (consulta
DefaultPermissionGrantPolicy.java).
Para obtener más información sobre los permisos para los controladores predeterminados, consulta
Permisos
que se usan solo en controladores predeterminados. También es posible otorgar permisos previamente con el default-permissions.xml
archivo de configuración. Para obtener detalles sobre las
restricciones relacionadas con el otorgamiento previo de permisos, consulta la Sección 9 en el
Documento de definición de compatibilidad (CDD) de Android.
Importante: En todos los casos, solo la VIA predeterminada tendría estos permisos otorgados previamente. Si el sistema tiene más de una VIA cargada previamente, la VIA no predeterminada debe solicitar permisos de forma explícita al usuario como parte de su configuración o durante el primer uso.
Distribución (instalación previa y actualización de implementación)
Las VIAs instaladas previamente deben residir en las particiones y carpetas /product/priv-apps o
/vendor/priv-apps (consulta más información sobre las particiones en Descripción general de las particiones y
Compila particiones de productos).
En el segundo caso, dado que la partición del proveedor se puede actualizar por separado del sistema, las apps alojadas aquí no podrán acceder a las APIs del sistema @hide. Según la ubicación de las apps instaladas previamente, las actualizaciones se pueden realizar como una OTA (consulta Actualizaciones OTA) o a través de actualizaciones de apps desde una tienda de aplicaciones.
Personalización
Como se mencionó en Conceptos específicos de Automotive, la coherencia y la personalización de la IU/UX son más importantes en Automotive que en cualquier otro factor de forma. Para obtener la máxima interoperabilidad, se recomienda usar la biblioteca de IU de Car de AAOS . Esta biblioteca incluye componentes y recursos que se pueden integrar en apps automotrices diseñadas para que los OEMs las personalicen. De esta manera, se puede compilar un solo APK de modo que su IU se pueda personalizar según el diseño de cada modelo de auto.