Benutzerdefinierte OEM-Eingaben

Verwenden Sie benutzerdefinierte OEM-Eingaben, um neue Auto-Eingabeereignisse für neue und nicht standardmäßige Android-Funktionen Nicht standardmäßige Eingabeereignisse werden vom Android KeyEvent, allgemein entwickelt und für jede Android-Oberfläche geeignet aber nicht auf die Implementierung OEM-spezifischer Funktionen erweitert. Zum Beispiel kann eine Schaltfläche auf dem Lenkrad. Durch Drücken wird eine Karten-App geöffnet. (über einen Intent) mit dem aktuellen Standort des Autos. Diese Funktion ermöglicht können Fahrer ihren aktuellen Standort sehen, ohne abgelenkt zu werden. im Auto.

In diesem Artikel wird beschrieben, wie du eine vorhandene Android-KeyEvent wiederverwenden kannst, um CustomInputEvent wird nur dann verwendet, wenn kein Android-KeyEvent zur Darstellung der Funktion verwendet werden.

HW_CUSTOM_INPUT

Eine benutzerdefinierte OEM-Eingabe wird durch HW_CUSTOM_INPUT und CustomInputEvent.java enthalten. HW_CUSTOM_INPUT ist der/die/das natives Ereignis, das von der Autohardware (Fahrzeug-HAL) instanziiert wird. OEMs entscheiden, wie dieses Ereignis instanziiert wird. Der Zugriff auf HW_CUSTOM_INPUT ist festgelegt als [read only]{:.external}, mit VehiclePropertyAccess:READ.

Damit der Fahrzeug-HAL immer den neuesten verfügbaren Wert übertragen kann, HW_CUSTOM_INPUT Benachrichtigung ist auf ON_CHANGE eingestellt, mit VehiclePropertyChangeMode:ON_CHANGE.

HW_CUSTOM_INPUT-Werte bestehen aus einem Array von generischen int32, festgelegt als [global]{:.external} (mit VehicleArea:GLOBAL). Die drei Generische Ganzzahlen sind:

  1. Das erste Element steht für den Eingabecode, der vom OEM definiert wird. Sie können dem Eingabecode eine beliebige Semantik zuordnen.

  2. Das zweite Element speichert die Zielanzeige, z. B. die Hauptanzeige oder Cluster.

  3. Das dritte Element enthält die Anzahl der Wiederholungen des Ereignisses. Beispielsweise, um anzuzeigen, wie oft eine Schaltfläche gedrückt wurde.

CustomInputEvent und Car Input API

InputHalService ist der Car-Dienst, der eine eingehende HW_CUSTOM_INPUT vom Fahrzeug-HAL.

InputHalService konvertiert die eingehende HW_CUSTOM_INPUT in die CustomInputEvent, eine Java-Parcelable-Klasse, die sich in car-lib/src/android/car/input, zusammen mit dem entsprechenden aidl-Schnittstelle.

CarInputService, ein zentraler Car InputService, empfängt eingehende CustomInputEvents und sendet sie dann an einen beliebigen registrierten Android-Systemdienst.

Systemdienste müssen folgende Voraussetzungen erfüllen, um CustomInputEvents zu registrieren und zu empfangen:

Das folgende Diagramm veranschaulicht den Workflow eines benutzerdefinierten OEM-Eingabeereignisses.

Benutzerdefinierter Eingabe-Workflow des OEMs

OEM-Android-Systemdienste

OEMs stellen ihren Android-Systemdienst zur Verfügung, um eingehende Anfragen CustomInputEvents von CarInputService.

Nur die Dienste, die mit dem Berechtigung android.permission.INJECT_EVENTS können CustomInputEvents von der Car Input API registrieren und von ihr empfangen. (CarInputManager) Drittanbieterdienste und -anwendungen können mit dieser Android-Systemberechtigung signiert (nur OEM-Dienste). Daher können sich Drittanbieterdienste und -anwendungen mit der Car Input API vergleichen.

OEM-Android-Systemdienste können auf SystemApi und öffentliche Methoden zugreifen.

Referenzimplementierung

Die Referenzimplementierung finden Sie in packages/services/Car/tests/SampleCustomInputService, die wird als Beispiel und als Richtlinie zur Verfügung gestellt. Um beispielsweise eine neue Schaltfläche auf das Steuerelement am Lenkrad. Wenn Sie auf diese neue Schaltfläche klicken, Karten-App mit dem aktuellen Autostandort.

In diesem Beispiel hat der OEM INPUT_CODE_F1 ausgewählt (die erste CustomInputEvent Komfortfunktion), um diese neue Funktion darzustellen (Öffnen der Karten-App mit den aktuellen Standort des Autos).

Beim Start registriert sich dieser Dienst bei CarInputManager bis requestInputEventCapture (siehe Registrierungscode für die Referenzimplementierung.

Beim Empfangen eingehender CustomInputEvents sendet dieser Dienst den Intent um die Maps App zu starten. Informationen dazu, wie dies erreicht wird, finden Sie unter CustomInputEventListener.java auf.