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 Configuración

Figura 1. Aplicaciones 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 candidatos mediante RolesManager con el nombre de función android.app.role.ASSISTANT .

Activación de palabras activas

Android proporciona AlwaysOnHotwordDetector como una abstracción sobre el hardware DSP. Esto proporciona una manera 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, 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 activas

Figura 2. Activación de palabras activas

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 es manejado por CarInputService . En una implementación predeterminada, este servicio maneja los eventos de entrada recibidos a través de la 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 breves de PTT ( KeyEvent.KEYCODE_VOICE_ASSIST ) se dirigen a VoiceInteractionManagerService para iniciar una nueva sesión de voz.
  • Los eventos de PTT largos se transmiten 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 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 de voz de hardware en AAOS, consulte Integración de entrada de clave automotriz .

Activación de toque para hablar (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 oculta del sistema que solo pueden usar las aplicaciones del sistema integradas, como la interfaz de usuario del sistema que habilita:

  • Interactuar con VoiceInteractionManagerService para iniciar sesiones de control por voz.
  • Determine 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 de TTT en CarSystemUI, AssistantButton .

Activación de toque para hablar

Figura 4. Activación de Tocar para hablar

Asistente de voz Tocar 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) incluirán un botón de acción Reproducir, que permite al usuario que el VIA seleccionado 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 Manejo de comandos de mensajería .

Inicie VIA desde Car Launcher

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

Importante. En Automotive, 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 iniciador debe estar disponible mientras conduce, agréguela a la lista de permitidos (si es un OEM) o anote la actividad con metadatos optimizados para la distractionOptimized . Para obtener más información, consulte Pautas de distracción del conductor .

DSP y HAL de audio

Asegúrese de revisar las pautas actualizadas con respecto a 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 las palabras activas .

permisos

Conceder permisos privilegiados del sistema

Dado que el usuario no puede otorgar permisos privilegiados, si un 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 Solicitud de permisos .

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

Android.bp

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

Agregue el archivo de permisos de la lista de permitidos de privilegios del sistema a la 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>

Preconcesiones de permisos peligrosos

Como se indica en Solicitud de permisos , VIA requiere el consentimiento del usuario para acceder a ciertas funcionalidades. Algunos de estos permisos se otorgan previamente al VoiceInteractionService predeterminado (consulte DefaultPermissionGrantPolicy.java ). Para obtener más información acerca de los permisos para los controladores predeterminados, consulte Permisos usados ​​solo en controladores predeterminados . También es posible otorgar permisos previamente mediante 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, solo el VIA predeterminado tendría estos permisos otorgados previamente. Si el sistema tiene más de un VIA precargado, el VIA no predeterminado 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)

Los VIA preinstalados deben residir en las particiones y carpetas /product/priv-apps o /vendor/priv-apps (vea más sobre las particiones en Particiones e imágenes y Creación de 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 una OTA (consulte Actualizaciones de OTA ) o mediante actualizaciones de aplicaciones desde una tienda de aplicaciones.

personalización

Como se mencionó en Conceptos específicos de automoción , la consistencia 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 de interfaz de usuario de automóviles de AAOS. Esta biblioteca incluye componentes y recursos que se pueden integrar en aplicaciones automotrices diseñadas para que los OEM las personalicen. De esta manera, se puede construir un solo APK de tal manera que su interfaz de usuario se pueda personalizar según el diseño de cada modelo de automóvil.