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:
Il primo elemento rappresenta il codice di input che deve essere definito dall'OEM. Puoi associare qualsiasi semantica al codice di input.
Il secondo elemento memorizza la visualizzazione target, ad esempio quella principale o cluster.
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:
Implementa CarInputManager.CarInput CaptureCallback#onKeyEvents.
Registrati tramite CarInputManager#requestInputEvent Capture, passando
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
come input .Per annullare la registrazione, i servizi devono richiamare CarInputManager#releaseInputEventCapture.
Il seguente diagramma illustra il flusso di lavoro di un evento di input personalizzato dell'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.