Do dodawania nowych i niestandardowych zdarzeń wejściowych z samochodu używaj niestandardowych danych wejściowych OEM
Funkcje Androida. Niestandardowe zdarzenia wejściowe nie są mapowane przez istniejące
Android KeyEvent
– uniwersalny, działa na wszystkich urządzeniach z Androidem
lecz nie zostały poszerzone o możliwość wdrożenia funkcji
charakterystycznych dla OEM. Na przykład:
znajduje się na kierownicy. Po jej naciśnięciu otwiera się aplikacja z mapami.
(za pomocą intencji) z aktualną lokalizacją samochodu. Ta funkcja umożliwia
mogą wizualizować swoją bieżącą lokalizację i jednocześnie nie rozpraszać uwagi kierowcy
podczas jazdy.
Z tego artykułu dowiesz się, jak ponownie wykorzystać dotychczasową wersję KeyEvent
Androida do:
utwórz CustomInputEvent
do użytku tylko wtedy, gdy żadne KeyEvent
Androida nie może
posłuży do reprezentowania tej funkcji.
HW_CUSTOM_INPUT
Niestandardowe dane wejściowe OEM są reprezentowane przez HW_CUSTOM_INPUT i
CustomInputEvent.java. HW_CUSTOM_INPUT to
zdarzenie natywne wywoływane przez sprzęt samochodowy (HAL pojazdu). Określeni przez OEM
jak utworzyć wystąpienie tego zdarzenia. Dostęp do HW_CUSTOM_INPUT jest
ustawiono jako [tylko do odczytu]{:.external} z VehiclePropertyAccess:READ
.
Aby mieć pewność, że HAL pojazdu zawsze może transmitować najnowszą dostępną wartość, makro
Powiadomienie HW_CUSTOM_INPUT jest ustawione na ON_CHANGE
i
VehiclePropertyChangeMode:ON_CHANGE
Wartości HW_CUSTOM_INPUT składają się z tablicy ogólnych
int32
z ustawieniem [globalny]{:.external} (z VehicleArea:GLOBAL
). Trzy
ogólne liczby całkowite to:
Pierwszy element to kod wejściowy, który zostanie zdefiniowany przez producenta OEM. Z kodem wejściowym możesz powiązać dowolną właściwość semantyczną.
Drugi element przechowuje docelowy wyświetlacz, na przykład wyświetlacz główny. lub klastra.
Trzeci element zawiera liczbę powtórzeń zdarzenia. Możesz na przykład wskazać, ile razy został naciśnięty przycisk.
CustomInputEvent i interfejs API samochodu
InputHalService to usługa samochodowa, która odbiera przychodzące
HW_CUSTOM_INPUT
z HAL pojazdu.
InputHalService konwertuje przychodzące HW_CUSTOM_INPUT
na
CustomInputEvent
, klasa parcelable w Javie znajdująca się w
car-lib/src/android/car/input oraz
interfejs Aidl.
CarInputService to podstawowa usługa w samochodach, która odbiera przychodzące CustomInputEvents, a następnie wysyła je do dowolnej zarejestrowanej usługi systemowej Androida.
Aby rejestrować i otrzymywać przychodzące zdarzenia CustomInputEvents, usługi systemowe muszą:
Wdróż funkcję CarInputManager.CarInputCaptureCallback#onKeyEvents.
Zarejestruj się przez CarInputManager#requestInputEventCapture, przekazując wartość
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
jako dane wejściowe. type.Aby można było wyrejestrować, usługi muszą wywoływać CarInputManager#releaseInputEventCapture.
Poniższy diagram przedstawia przepływ pracy zdarzenia niestandardowych danych wejściowych OEM.
Usługi systemowe Androida OEM
OEM zapewnia swoją usługę systemową Androida do obsługi przychodzących
Zdarzenia CustomInputEvents z CarInputService
.
Tylko usługi oznaczone symbolem Uprawnienie android.permission.INJECT_EVENTS może rejestrować i otrzymywać zdarzenia CustomInputEvents z interfejsu Carinput API (CarInputManager). Żadna usługa ani aplikacja innej firmy nie może być podpisane tym uprawnieniem systemu Android (tylko usługi OEM). Dlatego żadna usługa ani aplikacja innej firmy nie może w porównaniu z interfejsem Car Write API.
Usługi systemowe Androida OEM mają dostęp do SystemApi
i metod publicznych.
Implementacja referencyjna
Zobacz implementację referencyjną w packages/services/Car/tests/SampleCustomInputService, można ją wykorzystać tylko jako przykład i wskazówkę. Na przykład, aby dodać nowy przycisk w elemencie sterującym na kierownicy. Po naciśnięciu ten nowy przycisk uruchamia z aplikacją map z bieżącą lokalizacją samochodu.
W tym przykładzie OEM wybrał INPUT_CODE_F1
(pierwszy CustomInputEvent
funkcji zwiększającej wygodę), która reprezentuje tę nową funkcję (otwieranie aplikacji z mapami za pomocą polecenia
aktualnej lokalizacji samochodu).
Podczas uruchamiania ta usługa rejestruje się w: CarInputManager
przez requestInputEventCapture
(zobacz
kodu rejestracji implementacji referencyjnej.
Po otrzymaniu przychodzących zdarzeń CustomInputEvents ta usługa wysyła intencję aby uruchomić aplikację z mapami. Aby dowiedzieć się, jak to zrobić, zapoznaj się z artykułem CustomInputEventListener.java.