Flujos de integración

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

Apps predeterminadas en la pantalla Configuración

Figura 1: Apps predeterminadas en la pantalla Configuración

El VIA seleccionado se expone al sistema de dos maneras:

  1. Como parte del servicio del sistema RolesManager
  2. Por VoiceInteractionManagerService a través de la API interna de AssistUtils.

Se puede obtener una lista de VIA 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 forma conveniente de asociar un VoiceInteractionService a un modelo de voz para el reconocimiento de voz siempre activo 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.

Activación de palabras clave

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 del sistema HAL del vehículo y, en el caso particular de la interacción por voz, aplica la siguiente lógica a los eventos de teclas:

  • Los eventos de PTT cortos (KeyEvent.KEYCODE_VOICE_ASSIST) se dirigen a VoiceInteractionManagerService para iniciar una nueva sesión de voz.
  • Los eventos de 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.

Activación de PTT

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 para vehículos.

Activación de Presiona para hablar (o botón de software)

La activación de la interacción por voz desde la IU del sistema se realiza con AssistUtil. Esta es una API del sistema oculta que solo pueden usar las apps del sistema empaquetadas, como la IU del sistema, que habilita lo siguiente:

  • Interactuar con VoiceInteractionManagerService para iniciar sesiones de control por voz
  • Determina cuál es el VIA seleccionado 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 contenedor de roles de ROLE_ASSISTANT. Puedes encontrar un ejemplo de cómo implementar el disparo de TTT en CarSystemUI, AssistantButton.

Activación de Presiona para hablar

Figura 4: Activación de Presiona para hablar

Asistente de voz con función Presiona para leer (TTR)

En Automotive, las notificaciones publicadas en el Centro de notificaciones identificadas como notificaciones INBOX o INBOX_IN_GROUP (por ejemplo, mensajes SMS) incluyen un botón de acción de reproducción, que permite que el usuario haga que el VIA seleccionado lea las notificaciones en voz alta y, de manera opcional, responder por voz.

Notificaciones

Figura 5: Notificaciones

Para obtener más información sobre cómo implementar este flujo, consulta Cómo controlar los comandos de mensajería.

Cómo iniciar VIA desde el selector del vehículo

Al igual que cualquier otra app, las VIA pueden incluir una o más actividades de selector en su manifiesto. Depende del desarrollador de la app y del OEM que acepte preinstalar esta app para 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 quieres habilitar desde un ícono del selector debe estar disponible mientras conduces, 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 distracciones del conductor.

DSP y HAL de audio

Asegúrate de revisar los lineamientos actualizados sobre la grabación de audio siempre activa y la HAL de audio simultánea 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 palabras clave.

Permisos

Otorga permisos con privilegios del sistema

Dado que el usuario no puede otorgar permisos de privilegio, si un VIA necesita alguno de ellos, los OEMs deben precargar su APK en sus 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 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>

Otorgamiento previo de permisos peligrosos

Como se indica en Solicita permisos, la VIA requiere el consentimiento del usuario para acceder a ciertas funciones. Algunos de estos permisos se otorgan de forma previa al VoiceInteractionService predeterminado (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 por adelantado con el archivo de configuración default-permissions.xml. Para obtener detalles sobre las restricciones relacionadas con la concesión previa de permisos, consulta el artículo 9 del Documento de definición de compatibilidad (CDD) de Android.

Importante. En todos los casos, solo la VIA predeterminada tendría estos permisos otorgados de antemano. Si el sistema tiene más de un VIA precargado, el VIA no predeterminado debe solicitar permisos al usuario de forma explícita como parte de su configuración o durante el primer uso.

Distribución (actualizaciones previas a la instalación y de implementación)

Los VIA preinstalados deben estar en 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 de la industria automotriz, la coherencia y la personalización de la IU/UX son más importantes en la industria automotriz que en cualquier otro factor de forma. Para obtener la máxima interoperabilidad, se recomienda usar la biblioteca de IU de automóviles de AAOS. Esta biblioteca incluye componentes y recursos que se pueden integrar en apps para la industria automotriz diseñadas para que los OEM las personalicen. De esta manera, se puede compilar un solo APK de manera que su IU se pueda personalizar según el diseño de cada modelo de automóvil.