Input personalizzati OEM

Utilizza gli input personalizzati OEM per aggiungere nuovi eventi di input Auto per i nuovi eventi e quelli non standard Funzionalità Android. Gli eventi di input non standard non vengono mappati dal campo Android KeyEvent, progettato per essere generico e funzionare su qualsiasi piattaforma Android ma non esteso per implementare funzionalità specifiche per l'OEM. Ad esempio, un pulsante situato sul controllo al volante che, se premuto, apre un'app per le mappe (tramite un intent) con la posizione attuale dell'auto. Questa funzione consente ai conducenti di visualizzare la loro posizione attuale senza distrarsi alla guida.

In questo articolo viene descritto come riutilizzare un KeyEvent Android esistente per crea un CustomInputEvent da utilizzare solo quando non è possibile usare KeyEvent per Android da utilizzare per rappresentare la caratteristica.

HW_CUSTOM_INPUT

Un input personalizzato OEM è rappresentato da HW_CUSTOM_INPUT e CustomInputEvent.java: HW_CUSTOM_INPUT è il valore nativo, creato dall'hardware dell'auto (Veicoli HAL). Gli OEM stabiliscono come creare un'istanza per questo evento. L'accesso a HW_CUSTOM_INPUT è impostato come [sola lettura]{:.external}, con VehiclePropertyAccess:READ.

Per assicurarti che l'HAL del veicolo possa sempre trasmettere l'ultimo valore disponibile, La notifica HW_CUSTOM_INPUT è impostata su ON_CHANGE, con VehiclePropertyChangeMode:ON_CHANGE.

I valori di HW_CUSTOM_INPUT sono composti da un array di valori generici int32, impostato come [global]{:.external} (con VehicleArea:GLOBAL) I tre i numeri interi generici sono:

  1. Il primo elemento rappresenta il codice di input che deve essere definito dall'OEM. Puoi associare qualsiasi semantica al codice di input.

  2. Il secondo elemento memorizza la visualizzazione target, ad esempio quella principale o 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.

CustomInputEvent e API Car Input

InputHalService è il servizio auto che riceve una richiesta in entrata HW_CUSTOM_INPUT dall'HAL per veicoli.

InputHalService converte il HW_CUSTOM_INPUT in entrata in CustomInputEvent, una classe Java parcelable situata in car-lib/src/android/car/input, insieme ai rispettivi interfaccia AIDL.

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

Per registrare e ricevere CustomInputEvents in arrivo, i servizi di sistema devono:

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

Flusso di lavoro di immissione personalizzato OEM

Servizi di sistema Android OEM

Gli OEM forniscono il loro servizio di sistema Android per gestire le entrate CustomInputEvents da CarInputService.

Solo i servizi contrassegnati con Autorizzazione privilegio android.permission.INJECT_EVENTS può registrare 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ò e l'API Car Input.

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

Implementazione dei riferimenti

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

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

Durante l'avvio, questo servizio si registra in CarInputManager alla requestInputEventCapture (vedi codice di registrazione per l'implementazione di riferimento.

Quando riceve CustomInputEvents in entrata, questo servizio invia l'intent per avviare l'app Maps. Per sapere come si procede, consulta CustomInputEventListener.java.