Niestandardowe dane wejściowe OEM

Użyj niestandardowych danych wejściowych OEM, aby dodać nowe zdarzenia wejściowe samochodu dla nowych i niestandardowych funkcji Androida. Niestandardowe zdarzenia wejściowe nie są mapowane przez istniejące wydarzenie Android KeyEvent , zaprojektowane tak, aby było ogólne i działało na dowolnej powierzchni Androida, ale nie zostało rozszerzone w celu implementacji funkcji specyficznych dla OEM. Na przykład przycisk znajdujący się na kierownicy, którego naciśnięcie otwiera aplikację mapową (poprzez intencję) z aktualną lokalizacją samochodu. Ta funkcja umożliwia kierowcom wizualizację ich aktualnej lokalizacji bez rozpraszania się podczas jazdy.

W tym artykule opisano, jak ponownie wykorzystać istniejące KeyEvent systemu Android w celu utworzenia CustomInputEvent do użycia tylko wtedy, gdy do reprezentowania tej funkcji nie można użyć żadnego KeyEvent systemu Android.

HW_CUSTOM_INPUT

Niestandardowe dane wejściowe OEM są reprezentowane przez HW_CUSTOM_INPUT i CustomInputEvent.java . HW_CUSTOM_INPUT to zdarzenie natywne, tworzone przez sprzęt samochodu (Vehicle HAL). Producenci OEM określają, jak utworzyć instancję tego zdarzenia. Dostęp do HW_CUSTOM_INPUT jest ustawiony jako [tylko do odczytu]{:.external}, z VehiclePropertyAccess:READ .

Aby mieć pewność, że HAL pojazdu może zawsze nadawać najnowszą dostępną wartość, powiadomienie HW_CUSTOM_INPUT jest ustawione na ON_CHANGE , z VehiclePropertyChangeMode:ON_CHANGE .

Wartości HW_CUSTOM_INPUT składają się z tablicy ogólnych int32 , ustawionych jako [global]{:.external} (z VehicleArea:GLOBAL ) Trzy ogólne liczby całkowite to:

  1. Pierwszy element reprezentuje kod wejściowy, który ma zostać zdefiniowany przez producenta OEM. Do kodu wejściowego można powiązać dowolną semantykę.

  2. Drugi element przechowuje docelowy wyświetlacz, taki jak główny wyświetlacz lub klaster.

  3. Trzeci element zawiera liczbę powtórzeń zdarzenia. Na przykład, aby wskazać, ile razy naciśnięto przycisk.

Interfejs API CustomInputEvent i wprowadzania danych w samochodzie

WejścieHalService to usługa samochodowa, która odbiera przychodzący HW_CUSTOM_INPUT z HAL pojazdu.

WejścieHalService konwertuje przychodzący HW_CUSTOM_INPUT na CustomInputEvent , klasę Java, którą można dzielić na pakiety , zlokalizowaną w car-lib/src/Android/car/input , wraz z odpowiednim interfejsem pomocy .

CarInputService , podstawowa usługa Car input, odbiera przychodzące zdarzenia CustomInputEvent, a następnie wysyła je do dowolnej zarejestrowanej usługi systemu Android.

Aby rejestrować i odbierać przychodzące zdarzenia CustomInputEvent, usługi systemowe muszą:

Poniższy diagram ilustruje przebieg zdarzenia niestandardowego wprowadzania danych OEM.

Niestandardowy przepływ pracy wprowadzania danych OEM

Usługi systemu OEM Android

Producenci OEM udostępniają usługę systemu Android do obsługi przychodzących zdarzeń CustomInputEvent z CarInputService .

Tylko usługi oznaczone uprawnieniem android.permission.INJECT_EVENTS mogą rejestrować i odbierać zdarzenia CustomInputEvent z interfejsu API wejścia samochodowego ( CarInputManager ). Żadna usługa ani aplikacja strony trzeciej nie może być podpisana za pomocą tego uprawnienia systemu Android (tylko usługi OEM). Dlatego żadna usługa ani aplikacja strony trzeciej nie może zarejestrować się w interfejsie API Car Wejście.

Usługi systemu OEM Android mogą uzyskiwać dostęp do SystemApi i metod publicznych.

Implementacja referencyjna

Zobacz implementację referencyjną w package/services/Car/tests/SampleCustomInputService , która jest podana jako przykład i wytyczna. Na przykład, aby dodać nowy przycisk w sterowaniu na kierownicy. Po naciśnięciu ten nowy przycisk uruchamia aplikację mapy z bieżącą lokalizacją samochodu.

W tym przykładzie producent OEM wybrał INPUT_CODE_F1 (pierwszą wygodną funkcję CustomInputEvent ) do reprezentowania tej nowej funkcji (otwieranie aplikacji map z bieżącą lokalizacją samochodu).

Podczas uruchamiania ta usługa rejestruje się w CarInputManager poprzez requestInputEventCapture (patrz referencyjny kod rejestracyjny implementacji .

Po otrzymaniu przychodzących zdarzeń CustomInputEvent ta usługa wysyła zamiar uruchomienia aplikacji map. Aby dowiedzieć się, jak to osiągnąć, zobacz plik CustomInputEventListener.java .