Niestandardowe dane wejściowe OEM

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:

  1. 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ą.

  2. Drugi element przechowuje docelowy wyświetlacz, na przykład wyświetlacz główny. lub klastra.

  3. 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ą:

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

Proces wprowadzania 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.