Dane wejściowe niestandardowe 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ący interfejs KeyEvent Androida, który jest zaprojektowany jako ogólny i działa na dowolnej powierzchni Androida, ale nie został rozszerzony o funkcje specyficzne dla producenta OEM. Przykładem jest przycisk na kierownicy, który po naciśnięciu otwiera aplikację map (za pomocą intencji) z bieżącą lokalizacją samochodu. Ta funkcja umożliwia kierowcom sprawdzenie bieżącej lokalizacji bez rozpraszania uwagi podczas jazdy.

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

HW_CUSTOM_INPUT

Niestandardowe dane wejściowe OEM są reprezentowane przez HW_CUSTOM_INPUTCustomInputEvent.java. HW_CUSTOM_INPUT to zdarzenie natywne, tworzone przez sprzęt samochodowy (Vehicle HAL). Producenci OEM określają, w jaki sposób to zdarzenie ma być tworzone. Dostęp do HW_CUSTOM_INPUT jest ustawiony jako [tylko do odczytu] z wartością VehiclePropertyAccess:READ.

Aby zapewnić, że HAL pojazdu zawsze może przesyłać najnowszą dostępną wartość, powiadomienie HW_CUSTOM_INPUT jest ustawione jako ON_CHANGE z wartością VehiclePropertyChangeMode:ON_CHANGE.

Wartości HW_CUSTOM_INPUT składają się z tablicy ogólnych liczb całkowitych int32, ustawionych jako GLOBAL (z VehicleArea:GLOBAL). Trzy ogólne liczby całkowite to:

  1. Pierwszy element to kod wejściowy, który ma być zdefiniowany przez producenta OEM. Z kodem wejściowym możesz skojarzyć dowolną semantykę.

  2. Drugi element zawiera docelowy wyświetlacz, 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 Vehicle HAL.

InputHalService przekształca przychodzące HW_CUSTOM_INPUTCustomInputEvent, czyli klasę parcelable w Javie, która znajduje się w car-lib/src/android/car/input, oraz odpowiedni interfejs AIDL.

CarInputService, podstawowa usługa wprowadzania danych w samochodzie, odbiera przychodzące zdarzenia CustomInputEvents, a następnie wysyła je do dowolnej zarejestrowanej usługi systemowej Androida.

Aby zarejestrować i otrzymywać przychodzące zdarzenia CustomInputEvents, usługi systemowe muszą:

Diagram poniżej przedstawia proces obsługi zdarzenia niestandardowego wejścia OEM.

Niestandardowy przepływ pracy OEM

Usługi systemowe Androida OEM

Producenci OEM udostępniają usługę systemową Androida, która obsługuje przychodzące zdarzenia CustomInputEvents z CarInputService.

Tylko usługi oznaczone uprawnieniem android.permission.INJECT_EVENTS mogą rejestrować i otrzymywać zdarzenia CustomInputEvents z interfejsu 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 interfejsie 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. Na przykład, aby dodać nowy przycisk w sterowaniu na kierownicy. Po naciśnięciu tego nowego przycisku uruchamia się aplikacja Mapy z aktualną lokalizacją samochodu.

W tym przykładzie producent OEM wybrał INPUT_CODE_F1 (pierwszą funkcję CustomInputEvent ułatwiającą korzystanie z samochodu), 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).

Gdy ta usługa odbiera przychodzące zdarzenia CustomInputEvent, wysyła intencję uruchomienia aplikacji Mapy. Aby dowiedzieć się, jak to zrobić, zapoznaj się z plikiem CustomInputEventListener.java.