Ingressi personalizzati OEM

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

Questo articolo descrive come riutilizzare un KeyEvent Android esistente per creare un CustomInputEvent da utilizzare solo quando non è possibile utilizzare 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). Gli OEM determinano come istanziare questo evento. L'accesso a HW_CUSTOM_INPUT è impostato come [sola lettura]{:.external}, 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]{:.external} (con VehicleArea:GLOBAL ) I tre numeri interi generici sono:

  1. Il primo elemento rappresenta il codice di input che deve essere definito dall'OEM. È possibile 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 si è 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 l' HW_CUSTOM_INPUT in entrata nel CustomInputEvent , una classe parcellabile Java situata in car-lib/src/android/car/input , insieme alla rispettiva interfaccia helpl .

CarInputService , un servizio Car Input principale, riceve CustomInputEvents in arrivo e quindi li invia a qualsiasi servizio di sistema Android registrato.

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

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

Flusso di lavoro di input personalizzato OEM

Servizi di sistema Android OEM

Gli OEM forniscono il servizio di sistema Android per gestire i CustomInputEvents in arrivo da CarInputService .

Solo i servizi contrassegnati con il privilegio 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 del sistema Android (solo servizi OEM). Pertanto, nessun servizio o applicazione di terze parti può essere registrato rispetto all'API Car Input.

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

Implementazione di riferimento

Vedere l'implementazione di riferimento in packages/services/Car/tests/SampleCustomInputService , fornito come esempio e linea guida. Ad esempio, per aggiungere un nuovo pulsante nei comandi al volante. Quando viene premuto, questo nuovo pulsante avvia l'app delle mappe con la posizione attuale dell'auto.

In questo esempio, l'OEM ha selezionato INPUT_CODE_F1 (la prima funzione comoda CustomInputEvent ) per rappresentare questa nuova funzionalità (apertura dell'app delle mappe con la posizione corrente dell'auto).

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

Quando si ricevono CustomInputEvents in arrivo, questo servizio invia l'intento di avviare l'app delle mappe. Per informazioni su come eseguire questa operazione, vedere CustomInputEventListener.java .