Niestandardowe dane wejściowe OEM

Używaj niestandardowych danych wejściowych OEM, aby dodawać nowe zdarzenia danych wejściowych Car w przypadku nowych i niestandardowych funkcji Androida. Niestandardowe zdarzenia wejściowe nie są mapowane przez dotychczasowy system KeyEvent na Androida. Zostały one zaprojektowane tak, aby były ogólne i działały na wszystkich platformach Androida, ale nie zostały rozszerzone o funkcje specyficzne dla OEM. Może to być na przykład przycisk na kierownicy, który po naciśnięciu otwiera aplikację map (za pomocą intencji) z aktualną lokalizacją samochodu. Dzięki tej funkcji kierowcy mogą wyświetlać swoją aktualną lokalizację bez rozpraszania się podczas jazdy.

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

HW_CUSTOM_INPUT

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

Aby zapewnić, że interfejs HAL pojazdu może zawsze przekazywać 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, ustawionej jako globalna. Te 3 ogólne liczby całkowite to:

  1. Pierwszy element reprezentuje kod wejściowy zdefiniowany przez producenta OEM. Z kodem wejściowym możesz powiązać dowolną semantykę.

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

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

Interfejsy API CustomInputEvent i Car Input

InputHalService to usługa Car, która otrzymuje przychodzące daneHW_CUSTOM_INPUT z interfejsu HAL pojazdu.

InputHalService konwertuje przychodzące dane 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 CarInput, odbiera przychodzące CustomInputEvents, a następnie wysyła je do dowolnej zarejestrowanej usługi systemowej Androida.

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

Poniższy diagram przedstawia przepływ pracy zdarzenia niestandardowych danych wejściowych OEM.

Proces obsługi danych wejściowych niestandardowych OEM

Usługi systemowe Androida OEM

OEM zapewnia swoją usługę systemową Androida do obsługi przychodzących zdarzeń CustomInputEvents z CarInputService.

Tylko usługi oznaczone uprawnieniem android.permission.INJECT_EVENTS mogą rejestrować i odbierać zdarzenia CustomInput 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 rejestrować się w interfejsie Car Input API.

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

Implementacja referencyjna

Zobacz implementację referencyjną w pliku packages/services/Car/tests/SampleCustomInputService, który służy jako przykład i wytyczne. Na przykład, aby dodać nowy przycisk w sterowaniu kierownicą. Po jego naciśnięciu uruchamia się aplikacja z mapami z bieżącą lokalizacją samochodu.

W tym przykładzie producent OEM wybrał INPUT_CODE_F1 (pierwsza CustomInputEventfunkcja ułatwiająca korzystanie z aplikacji) jako reprezentującą nową funkcję (otwieranie aplikacji Mapy z aktualną lokalizacją samochodu).

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

Po otrzymaniu zdarzeń CustomInputEvents usługa wysyła intencję, aby uruchomić aplikację Mapy. Aby dowiedzieć się, jak to działa, zapoznaj się z klasą CustomInputEventListener.java.