Verwenden Sie benutzerdefinierte OEM-Eingaben, um neue Auto-Eingabeereignisse für neue und nicht standardmäßige Android-Funktionen hinzuzufügen. Nicht standardmäßige Eingabeereignisse werden nicht durch das vorhandene Android KeyEvent
abgebildet, das generisch konzipiert ist und auf jeder Android-Oberfläche funktioniert, aber nicht erweitert wird, um OEM-spezifische Funktionen zu implementieren. Zum Beispiel eine Taste auf der Lenkradsteuerung, die beim Drücken eine Karten-App (durch eine Absicht) mit dem aktuellen Standort des Autos öffnet. Mit dieser Funktion können Fahrer ihren aktuellen Standort visualisieren, ohne während der Fahrt abgelenkt zu werden.
In diesem Artikel wird beschrieben, wie Sie ein vorhandenes Android KeyEvent
wiederverwenden, um ein CustomInputEvent
zu erstellen, das nur verwendet werden kann, wenn kein Android KeyEvent
zur Darstellung der Funktion verwendet werden kann.
HW_CUSTOM_INPUT
Eine benutzerdefinierte OEM-Eingabe wird durch HW_CUSTOM_INPUT und CustomInputEvent.java dargestellt. HW_CUSTOM_INPUT ist das native Ereignis, das von der Fahrzeughardware (Fahrzeug-HAL) instanziiert wird. OEMs bestimmen, wie dieses Ereignis instanziiert wird. Der Zugriff auf HW_CUSTOM_INPUT wird mit VehiclePropertyAccess:READ
auf [schreibgeschützt]{:.external} festgelegt.
Um sicherzustellen, dass die Fahrzeug-HAL immer den neuesten verfügbaren Wert übertragen kann, wird die HW_CUSTOM_INPUT- Benachrichtigung auf ON_CHANGE
mit VehiclePropertyChangeMode:ON_CHANGE
festgelegt.
HW_CUSTOM_INPUT- Werte bestehen aus einem Array generischer int32
, festgelegt als [global]{:.external} (mit VehicleArea:GLOBAL
). Die drei generischen Ganzzahlen sind:
Das erste Element stellt den vom OEM zu definierenden Eingabecode dar. Sie können dem Eingabecode eine beliebige Semantik zuordnen.
Das zweite Element speichert die Zielanzeige, z. B. die Hauptanzeige oder das Cluster.
Das dritte Element enthält die Anzahl der Wiederholungen des Ereignisses. Beispielsweise um anzuzeigen, wie oft eine Taste gedrückt wurde.
CustomInputEvent und Car Input API
InputHalService ist der Autodienst, der einen eingehenden HW_CUSTOM_INPUT
vom Fahrzeug-HAL empfängt.
InputHalService konvertiert das eingehende HW_CUSTOM_INPUT
in CustomInputEvent
, eine parzellierbare Java-Klasse, die sich in car-lib/src/android/car/input befindet, zusammen mit der entsprechenden Hilfsschnittstelle .
CarInputService , ein zentraler Car Input-Dienst, empfängt eingehende CustomInputEvents und sendet sie dann an jeden registrierten Android-Systemdienst.
Um eingehende CustomInputEvents zu registrieren und zu empfangen, müssen Systemdienste:
Implementieren Sie CarInputManager.CarInputCaptureCallback#onKeyEvents .
Registrieren Sie sich über CarInputManager#requestInputEventCapture und übergeben Sie
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
als Eingabetypparameter.Um die Registrierung aufzuheben, müssen Dienste CarInputManager#releaseInputEventCapture aufrufen.
Das folgende Diagramm veranschaulicht den Arbeitsablauf eines OEM Custom Input-Ereignisses.
OEM-Android-Systemdienste
OEMs stellen ihren Android-Systemdienst zur Verfügung, um eingehende CustomInputEvents von CarInputService
zu verarbeiten.
Nur die Dienste, die mit der Berechtigung android.permission.INJECT_EVENTS gekennzeichnet sind, können CustomInputEvents von der Car Input API ( CarInputManager ) registrieren und empfangen. Mit dieser Android-Systemberechtigung können keine Dienste oder Anwendungen Dritter signiert werden (nur OEM-Dienste). Daher kann sich kein Dienst oder keine Anwendung eines Drittanbieters für die Car Input API registrieren.
OEM-Android-Systemdienste können auf SystemApi
und öffentliche Methoden zugreifen.
Referenzimplementierung
Sehen Sie sich die Referenzimplementierung in packets/services/Car/tests/SampleCustomInputService an, die als Beispiel und Richtlinie bereitgestellt wird. Zum Beispiel um eine neue Schaltfläche in der Lenkradsteuerung hinzuzufügen. Wenn diese neue Schaltfläche gedrückt wird, wird die Karten-App mit dem aktuellen Standort des Fahrzeugs gestartet.
In diesem Beispiel wählte der OEM INPUT_CODE_F1
(die erste CustomInputEvent
Komfortfunktion) aus, um diese neue Funktion darzustellen (Öffnen der Karten-App mit dem aktuellen Fahrzeugstandort).
Beim Start registriert sich dieser Dienst über requestInputEventCapture
bei CarInputManager
(siehe Referenzimplementierungsregistrierungscode) .
Beim Empfang eingehender CustomInputEvents sendet dieser Dienst die Absicht, die Karten-App zu starten. Informationen dazu, wie dies erreicht wird, finden Sie unter CustomInputEventListener.java .