Benutzerdefinierte OEM-Eingaben

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:

  1. Das erste Element stellt den vom OEM zu definierenden Eingabecode dar. Sie können dem Eingabecode eine beliebige Semantik zuordnen.

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

  3. 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:

Das folgende Diagramm veranschaulicht den Arbeitsablauf eines OEM Custom Input-Ereignisses.

Benutzerdefinierter OEM-Eingabeworkflow

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 .