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:
Pierwszy element reprezentuje kod wejściowy, który ma zostać zdefiniowany przez producenta OEM. Do kodu wejściowego można powiązać dowolną semantykę.
Drugi element przechowuje docelowy wyświetlacz, taki jak główny wyświetlacz lub klaster.
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ą:
Implementacja CarInputManager.CarInputCaptureCallback#onKeyEvents .
Zarejestruj się za pomocą CarInputManager#requestInputEventCapture , przekazując
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
jako parametr typu wejściowego.Aby się wyrejestrować, usługi muszą wywołać CarInputManager#releaseInputEventCapture .
Poniższy diagram ilustruje przebieg zdarzenia niestandardowego 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 .