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:
El primer elemento representa el código de entrada que definirá el OEM. Puedes asociar cualquier semántica al código de entrada.
El segundo elemento almacena la pantalla de destino, como la pantalla principal. un clúster o un clúster.
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:
Implementa CarInputManager.CarInputCaptureCallback#onKeyEvents.
Regístrate con CarInputManager#requestInputEventCapture. y pasa
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
como entrada type.Para cancelar el registro, los servicios deben invocar CarInputManager#releaseInputEventCapture.
En el siguiente diagrama, se ilustra el flujo de trabajo de un evento 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