Gunakan masukan khusus OEM untuk menambahkan peristiwa masukan Mobil baru untuk fitur Android baru dan non-standar. Peristiwa masukan non-standar tidak dipetakan oleh Android KeyEvent
yang ada, dirancang untuk bersifat umum dan berfungsi pada platform Android apa pun, namun tidak diperluas untuk mengimplementasikan fitur khusus OEM. Misalnya, tombol yang terletak di kontrol roda kemudi yang bila ditekan, akan membuka aplikasi peta (melalui maksud) dengan lokasi mobil saat ini. Fitur ini memungkinkan pengemudi untuk memvisualisasikan lokasi mereka saat ini tanpa terganggu saat mengemudi.
Artikel ini menjelaskan cara menggunakan kembali Android KeyEvent
yang ada untuk membuat CustomInputEvent
untuk digunakan hanya ketika tidak ada Android KeyEvent
yang dapat digunakan untuk mewakili fitur tersebut.
HW_CUSTOM_INPUT
Masukan khusus OEM diwakili oleh HW_CUSTOM_INPUT dan CustomInputEvent.java . HW_CUSTOM_INPUT adalah peristiwa asli, yang dipakai oleh perangkat keras mobil (Kendaraan HAL). OEM menentukan cara membuat instance peristiwa ini. Akses ke HW_CUSTOM_INPUT disetel sebagai [hanya baca]{:.external}, dengan VehiclePropertyAccess:READ
.
Untuk memastikan HAL Kendaraan 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, ditetapkan sebagai [global]{:.external} (dengan VehicleArea:GLOBAL
) Tiga bilangan bulat generik adalah:
Elemen pertama mewakili kode masukan yang akan ditentukan oleh OEM. Anda dapat mengaitkan semantik apa pun ke kode masukan.
Elemen kedua menyimpan tampilan target, seperti tampilan utama atau cluster.
Elemen ketiga berisi berapa kali peristiwa itu terulang. Misalnya, untuk menunjukkan berapa kali suatu tombol ditekan.
CustomInputEvent dan API Input Mobil
InputHalService adalah layanan Mobil yang menerima HW_CUSTOM_INPUT
masuk dari HAL Kendaraan.
InputHalService mengonversi HW_CUSTOM_INPUT
yang masuk menjadi CustomInputEvent
, kelas paket Java yang terletak di car-lib/src/android/car/input , bersama dengan aidl interface masing-masing.
CarInputService , layanan inti Car Input, menerima CustomInputEvents yang masuk dan kemudian mengirimkannya ke layanan sistem Android mana pun yang terdaftar.
Untuk mendaftar dan menerima CustomInputEvents yang masuk, layanan sistem harus:
Terapkan CarInputManager.CarInputCaptureCallback#onKeyEvents .
Daftar melalui CarInputManager#requestInputEventCapture , meneruskan
CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
sebagai parameter tipe 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.
Implementasi referensi
Lihat implementasi referensi di package/services/Car/tests/SampleCustomInputService , yang disediakan sebagai contoh dan pedoman. Misalnya saja menambahkan tombol baru di kontrol setir. Saat ditekan, tombol baru ini memulai aplikasi peta dengan lokasi mobil saat ini.
Dalam contoh ini, OEM memilih INPUT_CODE_F1
(fungsi kenyamanan CustomInputEvent
pertama) untuk mewakili fitur baru ini (membuka aplikasi peta dengan lokasi mobil saat ini).
Saat start up, layanan ini mendaftarkan dirinya ke CarInputManager
melalui requestInputEventCapture
(lihat kode registrasi implementasi referensi .
Saat menerima CustomInputEvents yang masuk, layanan ini mengirimkan maksud untuk memulai aplikasi peta. Untuk mempelajari bagaimana hal ini dicapai, lihat CustomInputEventListener.java .