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 działa na dowolnej powierzchni Androida, ale nie zostało rozszerzone o wdrożenie funkcji specyficznych dla OEM. Na przykład przycisk na kierownicy, który po naciśnięciu otwiera aplikację Mapy (za pomocą intencji) z bieżącą 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ącej wersji Androida KeyEvent
, aby utworzyć wersję CustomInputEvent
, która będzie używana tylko wtedy, gdy nie można użyć wersji Androida KeyEvent
do reprezentowania danej funkcji.
HW_CUSTOM_INPUT
Dane wejściowe niestandardowe OEM są reprezentowane przez HW_CUSTOM_INPUT i CustomInputEvent.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 parametru HW_CUSTOM_INPUT jest ustawiony jako [tylko do odczytu] z wartością 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:
Pierwszy element reprezentuje kod wejściowy zdefiniowany przez producenta OEM. Z kodem wejściowym możesz powiązać dowolną semantykę.
Drugi element przechowuje wyświetlacz docelowy, np. wyświetlacz główny lub klaster.
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
do klasy CustomInputEvent
, która jest przesyłana do pakietu w Javie i znajduje 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ą:
Zaimplementuj metodę CarInputManager.CarInputCaptureCallback#onKeyEvents.
Zarejestruj się za pomocą metody CarInputManager#requestInputEventCapture, podając parametr inputType o wartości
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
.Aby anulować rejestrację, usługi muszą wywołać metodę CarInputManager#releaseInputEventCapture.
Ten diagram przedstawia przepływ danych w przypadku zdarzenia OEM Custom Input.
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 zarejestrować 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 CustomInputEvent
funkcja 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.