Dane wejściowe niestandardowe 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ścia nie są mapowane przez istniejące API Androida KeyEvent, które zostało zaprojektowane jako uniwersalne i ma działać na dowolnej powierzchni z Androidem, ale nie zostało rozszerzone o wdrożenie funkcji specyficznych dla producenta 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. Ta funkcja umożliwia kierowcom wizualizację ich bieżącej lokalizacji bez rozpraszania uwagi 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 instancjonować to zdarzenie. Dostęp do HW_CUSTOM_INPUT jest ustawiony jako [tylko do odczytu] za pomocą 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. wyświetlacz główny 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.

Usługa 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ą:

Ten diagram przedstawia przepływ danych w przypadku zdarzenia OEM Custom Input.

Proces danych wejściowych niestandardowych OEM

Usługi systemowe Androida OEM

Producenci urządzeń oryginalnych udostępniają usługę systemową Androida, która obsługuje przychodzące 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 mogą mieć dostęp do SystemApi i publicznych metod.

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 dodanie nowego przycisku w sterowaniu kierownicą. 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 (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ą usługi 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.