Gunakan input kustom OEM untuk menambahkan peristiwa input Mobil baru untuk fitur Android baru dan non-standar. Peristiwa input non-standar tidak dipetakan oleh
KeyEvent
Android yang ada, yang dirancang agar bersifat umum dan berfungsi di platform Android apa pun,
tetapi tidak diperluas untuk menerapkan fitur khusus OEM. Misalnya, tombol
yang terletak di kontrol setir yang, saat ditekan, akan membuka aplikasi peta
(melalui intent) dengan lokasi mobil saat ini. Fitur ini memungkinkan
pengemudi memvisualisasikan lokasi mereka saat ini tanpa terganggu saat
mengemudi.
Artikel ini menjelaskan cara menggunakan kembali KeyEvent
Android yang ada untuk
membuat CustomInputEvent
yang hanya akan digunakan saat tidak ada KeyEvent
Android yang dapat
digunakan untuk menampilkan fitur tersebut.
HW_CUSTOM_INPUT
Input kustom OEM direpresentasikan oleh HW_CUSTOM_INPUT dan
CustomInputEvent.java. HW_CUSTOM_INPUT adalah
peristiwa native, yang dibuat instance-nya oleh hardware mobil (HAL Kendaraan). OEM menentukan
cara membuat instance peristiwa ini. Akses ke HW_CUSTOM_INPUT
ditetapkan sebagai [hanya baca], dengan VehiclePropertyAccess:READ
.
Untuk memastikan Vehicle HAL selalu dapat menyiarkan nilai terbaru yang tersedia, notifikasi HW_CUSTOM_INPUT ditetapkan sebagai ON_CHANGE
, dengan
VehiclePropertyChangeMode:ON_CHANGE
.
Nilai HW_CUSTOM_INPUT terdiri dari array int32
generik, yang ditetapkan sebagai global Tiga
bilangan bulat generik adalah:
Elemen pertama mewakili kode input yang akan ditentukan oleh OEM. Anda dapat mengaitkan semantik apa pun ke kode input.
Elemen kedua menyimpan tampilan target, seperti cluster atau layar utama.
Elemen ketiga berisi frekuensi peristiwa diulang. Misalnya, untuk menunjukkan frekuensi tombol ditekan.
CustomInputEvent dan Car Input API
InputHalService adalah layanan Car yang menerima HW_CUSTOM_INPUT
yang masuk dari HAL Kendaraan.
InputHalService mengonversi HW_CUSTOM_INPUT
yang masuk menjadi
CustomInputEvent
, class parcelable Java yang terletak di
car-lib/src/android/car/input, beserta
antarmuka aidl masing-masing.
CarInputService, layanan Input Mobil inti, menerima CustomInputEvents yang masuk, lalu mengirimkannya ke layanan sistem Android yang terdaftar.
Untuk mendaftar dan menerima CustomInputEvents yang masuk, layanan sistem harus:
Terapkan CarInputManager.CarInputCaptureCallback#onKeyEvents.
Daftar melalui CarInputManager#requestInputEventCapture, dengan meneruskan
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
sebagai parameter jenis input.Untuk membatalkan pendaftaran, layanan harus memanggil CarInputManager#releaseInputEventCapture.
Diagram berikut mengilustrasikan alur kerja peristiwa Input Kustom OEM.
Layanan sistem Android OEM
OEM menyediakan layanan sistem Android mereka untuk menangani
CustomInputEvents yang masuk dari CarInputService
.
Hanya layanan yang ditandai dengan izin hak istimewa android.permission.INJECT_EVENTS yang dapat mendaftar dan menerima CustomInputEvents dari Car Input API (CarInputManager). Tidak ada layanan atau aplikasi pihak ketiga yang dapat ditandatangani dengan izin sistem Android ini (hanya layanan OEM). Oleh karena itu, tidak ada layanan atau aplikasi pihak ketiga yang dapat mendaftar ke Car Input API.
Layanan sistem Android OEM dapat mengakses SystemApi
dan metode publik.
Penerapan referensi
Lihat implementasi referensi di packages/services/Car/tests/SampleCustomInputService, yang disediakan sebagai contoh dan panduan. Misalnya, untuk menambahkan tombol baru di kontrol roda kemudi. Saat ditekan, tombol baru ini akan memulai aplikasi peta dengan lokasi mobil saat ini.
Dalam contoh ini, OEM memilih INPUT_CODE_F1
(fungsi praktis CustomInputEvent
pertama) untuk mewakili fitur baru ini (membuka aplikasi peta dengan
lokasi mobil saat ini).
Selama startup, layanan ini mendaftarkan dirinya ke CarInputManager
melalui requestInputEventCapture
(lihat
kode pendaftaran implementasi referensi.
Saat menerima CustomInputEvents yang masuk, layanan ini akan mengirim intent untuk memulai aplikasi peta. Untuk mempelajari cara melakukannya, lihat CustomInputEventListener.java.