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

Figura 1: Apps predeterminadas en la pantalla de Configuración
La VIA seleccionada se expone al sistema de dos maneras:
- Como parte del servicio del sistema
RolesManager - A través de
VoiceInteractionManagerServicepor medio de la API interna deAssistUtils
Se puede obtener una lista de las VIA candidatas con RolesManager y el nombre del rol android.app.role.ASSISTANT.
Activación por palabra clave
Android proporciona AlwaysOnHotwordDetector como una abstracción sobre el DSP de hardware. Esto proporciona una forma conveniente de asociar un VoiceInteractionService a un modelo de voz para el reconocimiento de voz siempre activo y de bajo consumo. 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 SHOW_SOURCE_ASSIST_GESTURE flag.

Figura 2: Activación por palabra 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 prolongada o breve del botón de hardware. En AAOS, CarInputService controla la función de PTT. En una implementación predeterminada, este servicio controla los eventos de entrada recibidos a través del 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 de PTT cortos (
KeyEvent.KEYCODE_VOICE_ASSIST) se dirigen aVoiceInteractionManagerServicepara iniciar una nueva sesión de voz. - Los eventos de PTT largos primero se entregan a los receptores de proyección (por ejemplo, Android Auto o CarPlay), luego a los dispositivos conectados por Bluetooth y, finalmente, 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 en AAOS, consulta la integración de Entrada de teclas automotriz.
Activación de Presiona para hablar (o botón de software)
La interacción por voz se activa desde la IU del sistema con AssistUtil. Esta es una API del sistema oculta que solo pueden usar las apps del sistema incluidas en el paquete, como la IU del sistema, que habilita lo siguiente:
- Interactuar con
VoiceInteractionManagerServicepara iniciar sesiones de control por voz - Determina 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.
Puedes encontrar un ejemplo de cómo implementar la activación de TTT en CarSystemUI, AssistantButton.

Figura 4: Activación de Presiona para hablar
Función de Tap-to-Read (TTR) del asistente por voz
En Automotive, las notificaciones publicadas en el Centro de notificaciones identificadas como notificaciones deINBOX o INBOX_IN_GROUP (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, que responda por voz.

Figura 5: Notificaciones
Para obtener más información sobre cómo implementar este flujo, consulta Cómo controlar comandos de mensajería.
Cómo iniciar VIA desde el selector del auto
Al igual que cualquier otra app, las VIA pueden incluir una o más actividades de inicio en su manifiesto. El desarrollador de la app y el OEM que acepta preinstalarla son quienes deciden qué harán 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 quieres habilitar desde un ícono de selector debe estar disponible mientras se conduce, agrégala a la lista de entidades permitidas (si eres un OEM) o anota la actividad con metadatos distractionOptimized. Para obtener más información, consulta los Lineamientos sobre la distracción del conductor.
DSP y HAL de audio
Asegúrate de revisar los lineamientos actualizados sobre la grabación de audio simultánea siempre activa y la 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 privilegiados, si una VIA necesita alguno de ellos, los OEM deben precargar su APK en las imágenes del sistema y otorgar esos permisos de forma explícita en sus compilaciones. Consulta Cómo solicitar 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 permiso de la lista de entidades permitidas con 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>
Otorgamiento previo de permisos peligrosos
Como se indica en Solicita permisos, VIA requiere el consentimiento del usuario para acceder a ciertas funcionalidades. Algunos de estos permisos se otorgan previamente al controlador predeterminado VoiceInteractionService (consulta DefaultPermissionGrantPolicy.java). Para obtener más información sobre los permisos de los controladores predeterminados, consulta Permisos que se usan solo en controladores predeterminados. También es posible otorgar permisos previamente con el archivo de configuración default-permissions.xml. Para obtener detalles sobre las restricciones relacionadas con el otorgamiento previo de permisos, consulta la sección 9 del
Documento de definición de compatibilidad (CDD) de Android.
Importante: En todos los casos, solo la VIA predeterminada tendrá estos permisos otorgados previamente. Si el sistema tiene más de una VIA precargada, la VIA no predeterminada debe solicitar permisos explícitamente al usuario como parte de su configuración o durante el primer uso.
Distribución (actualizaciones previas a la instalación y de implementación)
Las VIA preinstaladas deben estar en las particiones y carpetas /product/priv-apps o /vendor/priv-apps (obtén más información sobre las particiones en Descripción general de las particiones y Cómo compilar 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 preinstaladas, las actualizaciones se pueden realizar como 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 para automóviles, la coherencia y la personalización de la IU/UX son más importantes en el sector automotriz que en cualquier otro factor de forma. Para lograr la máxima interoperabilidad, se recomienda usar la biblioteca de Car UI de AAOS. Esta biblioteca incluye componentes y recursos que se pueden integrar en apps para automóviles diseñadas para que los OEM 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 automóvil.