Flujos de integración

La selección del VIA activo se realiza mediante ManageAssistActivity en CarSettings. Este flujo lo activa la aplicación PackageInstaller , como parte de la sección Aplicaciones predeterminadas de la pantalla Configuración.

Aplicaciones predeterminadas en la pantalla de Configuración

Figura 1. Aplicaciones predeterminadas en la pantalla Configuración

La VIA seleccionada se expone al sistema de dos formas:

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

Se puede obtener una lista de VIA candidatos utilizando RolesManager con el nombre de función android.app.role.ASSISTANT .

Activación de palabras clave

Android proporciona AlwaysOnHotwordDetector como una abstracción además del DSP de hardware. Esto proporciona una manera conveniente de asociar un VoiceInteractionService a un modelo de voz para un reconocimiento de voz siempre activo y de bajo consumo de energía. Este es el flujo de interacción más común y conocido, donde el usuario solicita interactuar con una Aplicación de Voz (VA) para iniciar una nueva conversación. Las sesiones de voz iniciadas 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, los componentes de VIA en verde.

Activación de PTT

Esto se aplica a una pulsación larga o corta de un botón de hardware. En AAOS, PTT lo maneja CarInputService . En una implementación predeterminada, este servicio maneja eventos de entrada recibidos a través del HAL del vehículo y, en el caso particular de la interacción de voz, aplica la siguiente lógica a los eventos clave:

  • Los eventos PTT cortos ( KeyEvent.KEYCODE_VOICE_ASSIST ) se dirigen a VoiceInteractionManagerService para iniciar una nueva sesión de voz.
  • Los eventos PTT largos se envían primero a los receptores de proyección (por ejemplo, Android Auto o CarPlay), luego a los dispositivos conectados por Bluetooth y, finalmente, a la aplicación VIA local.

Las sesiones iniciadas usando 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 de voz de hardware a AAOS, consulte Integración de entrada de clave automotriz .

Activación Tap-to-Talk (o botón de software)

La activación de la interacción de voz desde la interfaz de usuario del sistema se realiza mediante AssistUtil . Esta es una API de sistema oculta que solo puede ser utilizada por aplicaciones del sistema empaquetadas, como la interfaz de usuario del sistema que permite:

  • Interactuar con VoiceInteractionManagerService para iniciar sesiones de control por voz.
  • Determinar cuál es la VIA actualmente seleccionada.

Para presentar dinámicamente la aplicación VIA seleccionada, la interfaz de usuario del sistema puede usar RoleManager y seguir los cambios en el titular de la función para ROLE_ASSISTANT . Puede encontrar un ejemplo de cómo implementar la activación TTT en CarSystemUI, AssistantButton .

Activación de tocar para hablar

Figura 4. Activación de Tocar para hablar

Asistente de voz Tocar para leer (TTR)

En Automotriz, 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 Reproducir, que permite al usuario hacer que la VIA seleccionada lea las notificaciones en voz alta y, opcionalmente, responder por voz.

Notificaciones

Figura 5. Notificaciones

Para obtener más información sobre cómo implementar este flujo, consulte Manejar comandos de mensajería .

Inicie VIA desde el lanzador de automóviles

Como cualquier otra aplicación, las VIA pueden incluir una o más actividades de inicio en su manifiesto. Depende del desarrollador de la aplicación y del OEM que acepta preinstalar esta aplicación decidir qué harían estas actividades.

Importante. En Automoción, todas las actividades, incluidas las actividades del sistema, están sujetas a restricciones de UX mientras se conduce. Si la experiencia que desea habilitar desde un ícono de inicio debe estar disponible mientras conduce, agréguela a la lista de permitidos (si es un OEM) o anote la actividad con metadatos distractionOptimized . Para obtener más información, consulte Pautas para distraer al conductor .

DSP y audio HAL

Asegúrese de revisar las pautas actualizadas sobre la grabación de audio siempre activa simultánea y HAL de audio en Captura simultánea . El acceso a estas API puede tener un impacto significativo en el rendimiento de la detección de palabras activas, como se explica en Responder a palabras activas .

Permisos

Conceder permisos privilegiados del sistema

Dado que el usuario no puede otorgar permisos privilegiados, si VIA necesita alguno de ellos, los OEM deben precargar su APK en las imágenes de su sistema y otorgar esos permisos explícitamente en sus compilaciones. Consulte Solicitar permisos .

Para hacerlo, agregue una dependencia de lista de permisos de privilegios a su proyecto:

Android.bp

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

Agregue el archivo de permisos de la lista 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>

Pre-concesión de permisos peligrosos

Como se indica en Solicitar permisos , VIA requiere el consentimiento del usuario para acceder a determinadas funcionalidades. Algunos de estos permisos están otorgados previamente al VoiceInteractionService predeterminado (consulte DefaultPermissionGrantPolicy.java ). Para obtener más información sobre los permisos para los controladores predeterminados, consulte Permisos utilizados solo en los controladores predeterminados . También es posible otorgar permisos previamente utilizando el archivo de configuración default-permissions.xml . Para obtener detalles sobre las restricciones relacionadas con la concesión previa de permisos, consulte la Sección 9 en el Documento de definición de compatibilidad de Android (CDD) .

Importante. En todos los casos, sólo el VIA predeterminado tendría estos permisos concedidos 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 (preinstalación e implementación de actualizaciones)

Las VIA preinstaladas deben residir en las particiones y carpetas /product/priv-apps o /vendor/priv-apps (consulte más sobre las particiones en Descripción general de particiones y Crear particiones de productos ).

En el segundo caso, dado que la partición del proveedor podría actualizarse por separado del sistema, las aplicaciones alojadas aquí no podrán acceder a las API del sistema @hide. Dependiendo de la ubicación de las aplicaciones preinstaladas, las actualizaciones se pueden realizar como OTA (consulte Actualizaciones OTA ) o mediante actualizaciones de aplicaciones desde una tienda de aplicaciones.

Personalización

Como se menciona en Conceptos específicos de automoción , la coherencia y la personalización de UI/UX son más importantes en la automoción que en cualquier otro factor de forma. Para lograr la máxima interoperabilidad, se recomienda encarecidamente el uso de la biblioteca AAOS Car UI . Esta biblioteca incluye componentes y recursos que se pueden integrar en aplicaciones automotrices diseñadas para ser personalizadas por los OEM. De esta manera, se puede construir un único APK de manera que su interfaz de usuario se pueda personalizar según el diseño de cada modelo de automóvil.