Input kustom OEM

Gunakan input kustom OEM untuk menambahkan peristiwa input Mobil baru untuk fitur Android baru dan non-standar. Peristiwa input non-standar tidak dipetakan oleh Android KeyEvent yang ada, yang didesain agar bersifat generik dan berfungsi di permukaan Android mana pun, tetapi tidak diperluas untuk menerapkan fitur khusus OEM. Misalnya, tombol yang terletak di kontrol kemudi 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 akan digunakan hanya jika tidak ada KeyEvent Android yang dapat digunakan untuk merepresentasikan fitur.

HW_CUSTOM_INPUT

Input kustom OEM diwakili oleh HW_CUSTOM_INPUT dan CustomInputEvent.java. HW_CUSTOM_INPUT adalah peristiwa native, yang di-instansiasi oleh hardware mobil (Vehicle HAL). 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 generik int32, yang ditetapkan sebagai GLOBAL (dengan VehicleArea:GLOBAL) Tiga bilangan bulat generik adalah:

  1. Elemen pertama mewakili kode input yang akan ditentukan oleh OEM. Anda dapat mengaitkan semantik apa pun ke kode input.

  2. Elemen kedua menyimpan target tampilan, seperti tampilan utama atau cluster.

  3. Elemen ketiga berisi jumlah pengulangan peristiwa. Misalnya, untuk menunjukkan frekuensi tombol ditekan.

CustomInputEvent dan Car Input API

InputHalService adalah layanan Mobil yang menerima HW_CUSTOM_INPUT yang masuk dari HAL Kendaraan.

InputHalService mengonversi HW_CUSTOM_INPUT yang masuk menjadi CustomInputEvent, class parcelable Java yang berada 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 CustomInputEvent yang masuk, layanan sistem harus:

Diagram berikut menggambarkan alur kerja peristiwa Input Kustom OEM.

Alur kerja 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 mendaftarkan 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 terhadap Car Input API.

Layanan sistem Android OEM dapat mengakses SystemApi dan metode publik.

Implementasi referensi

Lihat implementasi referensi di packages/services/Car/tests/SampleCustomInputService, yang disediakan sebagai contoh dan panduan. Misalnya, untuk menambahkan tombol baru di kontrol kemudi. Saat ditekan, tombol baru ini akan memulai aplikasi Maps dengan lokasi mobil saat ini.

Dalam contoh ini, OEM memilih INPUT_CODE_F1 (fungsi praktis CustomInputEvent pertama) untuk merepresentasikan fitur baru ini (membuka aplikasi peta dengan lokasi mobil saat ini).

Selama proses mulai, layanan ini mendaftarkan dirinya ke CarInputManager melalui requestInputEventCapture (lihat kode pendaftaran penerapan referensi.

Saat menerima CustomInputEvents yang masuk, layanan ini mengirim intent untuk memulai aplikasi peta. Untuk mempelajari cara melakukannya, lihat CustomInputEventListener.java.