Entradas personalizadas de OEM

Usa entradas personalizadas de OEM para agregar nuevos eventos de entrada de automóviles para los modelos nuevos y no estándar Android. Los eventos de entrada no estándar no se asignan Android KeyEvent, diseñado para ser genérico y funcionar en cualquier plataforma de Android pero no extendidas para implementar funciones específicas de OEM. Por ejemplo, un botón ubicado en el control del volante que, al presionarlo, abre una app de mapas (mediante un intent) con la ubicación actual del auto. Esta función permite que los conductores visualicen su ubicación actual sin distraerse mientras conducir.

En este artículo, se describe cómo reutilizar un KeyEvent de Android existente para hacer lo siguiente: Crea un CustomInputEvent para usar únicamente cuando ningún KeyEvent de Android pueda para representar el atributo.

HW_CUSTOM_INPUT

Una entrada personalizada de OEM se representa con HW_CUSTOM_INPUT y CustomInputEvent.java. HW_CUSTOM_INPUT es el evento nativo, que crea una instancia en el hardware del vehículo (HAL del vehículo). Los OEM determinan cómo crear una instancia de este evento. El acceso a HW_CUSTOM_INPUT está Se configuró como {:.external}, con VehiclePropertyAccess:READ.

Para garantizar que la HAL del vehículo pueda transmitir siempre el último valor disponible, el HW_CUSTOM_INPUT esté configurada como ON_CHANGE, con VehiclePropertyChangeMode:ON_CHANGE

Los valores HW_CUSTOM_INPUT se componen de un array de elementos genéricos. int32, configurada como [global]{:.external} (con VehicleArea:GLOBAL) Las tres Estos son los números enteros genéricos:

  1. El primer elemento representa el código de entrada que definirá el OEM. Puedes asociar cualquier semántica al código de entrada.

  2. El segundo elemento almacena la pantalla de destino, como la pantalla principal. un clúster o un clúster.

  3. El tercer elemento contiene la cantidad de veces que se repitió el evento. Por ejemplo, para indicar cuántas veces se presionó un botón.

CustomInputEvent y la API de Car Input

InputHalService es el servicio de Car que recibe un HW_CUSTOM_INPUT de la HAL del vehículo.

InputHalService convierte el HW_CUSTOM_INPUT entrante en CustomInputEvent, una clase parcelable de Java ubicada en car-lib/src/android/car/input, junto con los componentes Interfaz AIDL

CarInputService, un servicio principal de entrada de vehículos, recibe entradas CustomInputEvents y, luego, los envía a cualquier servicio registrado del sistema de Android.

Para registrar y recibir CustomInputEvents entrantes, los servicios del sistema deben hacer lo siguiente:

En el siguiente diagrama, se ilustra el flujo de trabajo de un evento de entrada personalizada de OEM.

Flujo de trabajo de entrada personalizada de OEM

Servicios del sistema Android de OEM

Los OEMs brindan su servicio del sistema Android para administrar CustomInputEvents de CarInputService.

Solo los servicios marcados con el Permiso de privilegio android.permission.INJECT_EVENTS Puede registrar y recibir CustomInputEvents de la API de Car Input. (CarInputManager). Ningún servicio o aplicación de terceros puede firmarse con este permiso del sistema Android (solo servicios del OEM). Por lo tanto, ningún servicio o aplicación de terceros puede registrarse con la API de Car Input.

Los servicios del sistema Android de OEM pueden acceder a SystemApi y a métodos públicos.

Implementación de referencia

Consulta la implementación de referencia en packages/services/Car/tests/SampleCustomInputService, que se proporciona como ejemplo y guía. Por ejemplo, para agregar un botón nuevo en el control del volante. Cuando lo presionas, este nuevo botón inicia Maps con la ubicación actual del vehículo.

En este ejemplo, el OEM seleccionó INPUT_CODE_F1 (el primer CustomInputEvent (función práctica) para representar esta nueva función (abrir la aplicación de mapas con la ubicación actual del automóvil).

Durante el inicio, este servicio se registra en CarInputManager a través de requestInputEventCapture (consulta la código de registro de implementación de referencia.

Cuando se reciben CustomInputEvents entrantes, este servicio envía el intent para iniciar la aplicación de mapas. Para saber cómo se logra esto, consulta CustomInputEventListener.java