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:
Il primo elemento rappresenta il codice di input da definire dal produttore OEM. Puoi associare qualsiasi semantica al codice di input.
Il secondo elemento memorizza il display di destinazione, ad esempio il display principale o il 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.
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:
Implementa CarInputManager.CarInputCaptureCallback#onKeyEvents.
Registrati tramite CarInputManager#requestInputEventCapture, passando
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
come parametro del tipo di 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 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.