Dane wejściowe niestandardowe OEM

Używaj niestandardowych danych wejściowych OEM, aby dodawać nowe zdarzenia wejściowe w samochodzie w przypadku nowych i niestandardowych funkcji Androida. Niestandardowe zdarzenia wejściowe nie są mapowane przez istniejący element KeyEvent w Androidzie, który jest zaprojektowany tak, aby był ogólny i działał na dowolnej powierzchni Androida, ale nie jest rozszerzony o funkcje specyficzne dla OEM. Przykładem jest przycisk znajdujący się na kierownicy, który po naciśnięciu otwiera aplikację Mapy (za pomocą intencji) z bieżącą lokalizacją samochodu. Ta funkcja umożliwia kierowcom wyświetlanie bieżącej lokalizacji bez rozpraszania uwagi podczas jazdy.

Z tego artykułu dowiesz się, jak ponownie użyć istniejącego elementu KeyEvent w Androidzie, aby utworzyć element CustomInputEvent do użycia tylko wtedy, gdy nie można użyć elementu KeyEvent w Androidzie do reprezentowania funkcji.

HW_CUSTOM_INPUT

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

Aby mieć pewność, że Vehicle HAL może zawsze rozgłaszać najnowszą dostępną wartość, powiadomienie HW_CUSTOM_INPUT jest ustawione jako ON_CHANGE, z VehiclePropertyChangeMode:ON_CHANGE.

HW_CUSTOM_INPUT values are composed of an array of generic int32, set as GLOBAL (with VehicleArea:GLOBAL) The three generic integers are:

  1. Pierwszy element reprezentuje kod wejściowy, który ma zostać zdefiniowany przez OEM. Z kodem wejściowym możesz powiązać dowolną semantykę.

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

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

CustomInputEvent i Car Input API

InputHalService to usługa samochodowa, która odbiera przychodzące HW_CUSTOM_INPUT z interfejsu HAL pojazdu.

InputHalService konwertuje przychodzące HW_CUSTOM_INPUT na CustomInputEvent, czyli klasę Java parcelable znajdującą się w car-lib/src/android/car/input, wraz z odpowiednim interfejsem aidl.

CarInputService, podstawowa usługa Car Input, odbiera przychodzące CustomInputEvents, a następnie wysyła je do dowolnej zarejestrowanej usługi systemowej Androida.

Aby zarejestrować się i odbierać przychodzące CustomInputEvents, usługi systemowe muszą:

Poniższy diagram ilustruje cykl przetwarzania zdarzenia niestandardowego wejścia OEM.

Niestandardowy przepływ pracy OEM

Usługi systemowe Androida OEM

OEM udostępniają swoją usługę systemową Androida do obsługi przychodzących CustomInputEvents z CarInputService.

Tylko usługi oznaczone uprawnieniem android.permission.INJECT_EVENTS mogą rejestrować się i odbierać CustomInputEvents z Car Input API (CarInputManager). Żadna usługa ani aplikacja innej firmy nie może być podpisana tym uprawnieniem systemu Android (tylko usługi OEM). Dlatego żadna usługa ani aplikacja innej firmy nie może zarejestrować się w Car Input API.

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

Implementacja referencyjna

Zobacz implementację referencyjną w packages/services/Car/tests/SampleCustomInputService, która jest podana jako przykład i wskazówka. Możesz na przykład dodać nowy przycisk na kierownicy. Po naciśnięciu tego nowego przycisku uruchamia się aplikacja Mapy z bieżącą lokalizacją samochodu.

W tym przykładzie OEM wybrał INPUT_CODE_F1 (pierwszą funkcję wygody CustomInputEvent), aby reprezentować tę nową funkcję (otwieranie aplikacji Mapy z bieżącą lokalizacją samochodu).

Podczas uruchamiania ta usługa rejestruje się w CarInputManager za pomocą requestInputEventCapture (zobacz kod rejestracji implementacji referencyjnej.

Po otrzymaniu przychodzących CustomInputEvents ta usługa wysyła intencję uruchomienia aplikacji Mapy. Aby dowiedzieć się, jak to zrobić, zobacz CustomInputEventListener.java.