Input personalizzati OEM

Utilizza gli input personalizzati OEM per aggiungere nuovi eventi di input dell'auto per funzionalità Android nuove e non standard. Gli eventi di input non standard non vengono mappati dall'KeyEvent Android esistente, progettato per essere generico e funzionare su qualsiasi superficie Android, ma non esteso per implementare funzionalità specifiche dell'OEM. Ad esempio, un pulsante sul comando del volante che, quando viene premuto, apre un'app di mappe (tramite un intent) con la posizione attuale dell'auto. Questa funzionalità consente ai conducenti di visualizzare la loro posizione attuale senza distrarsi mentre guidano.

Questo articolo descrive come riutilizzare un intent Android KeyEvent esistente per creare un intent CustomInputEvent da utilizzare solo quando non è possibile utilizzare un intent Android KeyEvent per rappresentare la funzionalità.

HW_CUSTOM_INPUT

Un input personalizzato OEM è rappresentato da HW_CUSTOM_INPUT e CustomInputEvent.java. HW_CUSTOM_INPUT è l'evento nativo istanziato dall'hardware dell'auto (HAL del veicolo). I produttori OEM determinano come creare un'istanza di questo evento. L'accesso a HW_CUSTOM_INPUT è impostato come [sola lettura], con VehiclePropertyAccess:READ.

Per garantire che l'HAL del veicolo possa sempre trasmettere l'ultimo valore disponibile, la notifica HW_CUSTOM_INPUT è impostata come ON_CHANGE, con VehiclePropertyChangeMode:ON_CHANGE.

I valori HW_CUSTOM_INPUT sono composti da un array di int32 generici, impostati come GLOBAL (con VehicleArea:GLOBAL). I tre numeri interi generici sono:

  1. Il primo elemento rappresenta il codice di input da definire dal produttore OEM. Puoi associare qualsiasi semantica al codice di input.

  2. Il secondo elemento memorizza il display di destinazione, ad esempio il display principale o il cluster.

  3. Il terzo elemento contiene il numero di volte in cui l'evento è stato ripetuto. Ad esempio, per indicare quante volte è stato premuto un pulsante.

API CustomInputEvent e Car Input

InputHalService è il servizio auto che riceve un HW_CUSTOM_INPUT in entrata dall'HAL del veicolo.

InputHalService converte HW_CUSTOM_INPUT in CustomInputEvent, una classe parcelable Java che si trova in car-lib/src/android/car/input, insieme alla rispettiva interfaccia AIDL.

CarInputService, un servizio di input dell'auto principale, riceve CustomInputEvents in entrata e li invia a qualsiasi servizio di sistema Android registrato.

Per registrarsi e ricevere CustomInputEvents in entrata, i servizi di sistema devono:

Il seguente diagramma illustra il flusso di lavoro di un evento di input personalizzato OEM.

Workflow di input personalizzato OEM

Servizi di sistema Android OEM

Gli OEM forniscono il proprio servizio di sistema Android per gestire gli eventi CustomInputEvents in entrata da CarInputService.

Solo i servizi contrassegnati con l'autorizzazione android.permission.INJECT_EVENTS possono registrarsi e ricevere CustomInputEvents dall'API Car Input (CarInputManager). Nessun servizio o applicazione di terze parti può essere firmato con questa autorizzazione di sistema Android (solo servizi OEM). Pertanto, nessun servizio o applicazione di terze parti può registrarsi all'API Car Input.

I servizi di sistema Android OEM possono accedere a SystemApi e ai metodi pubblici.

Implementazione di riferimento

Vedi l'implementazione di riferimento in packages/services/Car/tests/SampleCustomInputService, che viene fornito come esempio e linea guida. Ad esempio, per aggiungere un nuovo pulsante nel controllo del volante. Quando viene premuto, questo nuovo pulsante avvia l'app Maps con la posizione attuale dell'auto.

In questo esempio, l'OEM ha selezionato INPUT_CODE_F1 (la prima funzione di comodità CustomInputEvent) per rappresentare questa nuova funzionalità (apertura dell'app Maps con la posizione attuale dell'auto).

Durante l'avvio, questo servizio si registra su CarInputManager tramite requestInputEventCapture (vedi il codice di registrazione dell'implementazione di riferimento.

Quando riceve CustomInputEvents in entrata, questo servizio invia l'intent per avviare l'app Maps. Per scoprire come viene eseguita questa operazione, consulta CustomInputEventListener.java.