Gunakan input kustom OEM untuk menambahkan peristiwa input Mobil baru untuk mobil baru dan non-standar
Android. Peristiwa input non-standar tidak dipetakan oleh peristiwa input yang ada
KeyEvent
Android, yang dirancang agar bersifat umum dan berfungsi di platform Android apa pun
tetapi tidak diperluas untuk
menerapkan fitur khusus OEM. Misalnya, sebuah tombol
yang terletak di kontrol roda kemudi yang, saat ditekan, membuka aplikasi peta
(melalui intent) dengan lokasi mobil saat ini. Fitur ini memungkinkan
pengemudi untuk memvisualisasikan lokasi mereka
saat ini tanpa menjadi terganggu saat
mengemudi.
Artikel ini menjelaskan cara menggunakan kembali KeyEvent
Android yang ada untuk
membuat CustomInputEvent
untuk hanya digunakan saat tidak ada KeyEvent
Android yang dapat
digunakan untuk mewakili fitur.
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 (Kendaraan HAL). OEM menentukan
cara membuat instance peristiwa ini. Akses ke HW_CUSTOM_INPUT adalah
ditetapkan sebagai [hanya baca]{:.external}, dengan VehiclePropertyAccess:READ
.
Untuk memastikan Vehicle HAL selalu bisa menyiarkan nilai terbaru yang tersedia,
Notifikasi HW_CUSTOM_INPUT disetel sebagai ON_CHANGE
, dengan
VehiclePropertyChangeMode:ON_CHANGE
.
Nilai HW_CUSTOM_INPUT terdiri dari array generik
int32
, ditetapkan sebagai [global]{:.external} (dengan VehicleArea:GLOBAL
) Ketiga
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 layar utama atau cluster.
Elemen ketiga berisi frekuensi kejadian berulang. Misalnya, untuk menunjukkan berapa kali tombol ditekan.
CustomInputEvent dan Car Input API
InputHalService adalah layanan Car yang menerima
HW_CUSTOM_INPUT
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 kode terkait
antarmuka bantuan.
CarInputService, layanan Input Mobil inti, menerima data masuk CustomInputEvents kemudian mengirimkannya ke layanan sistem Android apa pun yang terdaftar.
Untuk mendaftarkan dan menerima CustomInputEvents yang masuk, layanan sistem harus:
Terapkan CarInputManager.CarInputCaptureCallback#onKeyEvents.
Daftar melalui CarInputManager#requestInputEventCapture, meneruskan
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
sebagai input jenis parameter.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 untuk menangani masuknya
CustomInputEvents dari CarInputService
.
Hanya layanan yang ditandai dengan Izin hak istimewa android.permission.INJECT_EVENTS 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 (khusus layanan OEM). Oleh karena itu, tidak ada layanan atau aplikasi pihak ketiga yang dapat mendaftar terhadap Car Input API.
Layanan sistem Android OEM dapat mengakses SystemApi
dan metode publik.
Penerapan referensi
Lihat penerapan referensi di packages/services/Car/tests/SampleCustomInputService, yang akan diberikan sebagai contoh dan pedoman. Misalnya, untuk menambahkan tombol baru dalam kontrol setir. Saat ditekan, tombol baru ini memulai Maps dengan lokasi mobil saat ini.
Dalam contoh ini, OEM memilih INPUT_CODE_F1
(CustomInputEvent
pertama
fungsi praktis) untuk merepresentasikan fitur baru ini (membuka aplikasi peta dengan
lokasi mobil saat ini).
Selama startup, layanan ini terdaftar secara otomatis pada CarInputManager
sampai requestInputEventCapture
(lihat
kode pendaftaran implementasi referensi.
Saat menerima CustomInputEvents yang masuk, layanan ini akan mengirimkan intent untuk memulai aplikasi peta. Untuk mempelajari bagaimana hal ini dicapai, lihat CustomInputEventListener.java.