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:
Das erste Element steht für den Eingabecode, der vom OEM definiert wird. Sie können dem Eingabecode eine beliebige Semantik zuordnen.
Das zweite Element speichert die Zielanzeige, z. B. die Hauptanzeige oder Cluster.
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:
Implementieren Sie CarInputManager.CarInputCaptureCallback#onKeyEvents.
Registrieren Sie sich über CarInputManager#requestInputEventCapture. Übergeben von
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
als Eingabe type-Parameter.Zum Aufheben der Registrierung müssen Dienste CarInputManager#releaseInputEventCapture auf.
Das folgende Diagramm veranschaulicht den Workflow eines benutzerdefinierten OEM-Eingabeereignisses.
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.