Sebelum Anda melanjutkan, tinjau Pedoman Gangguan Mengemudi .
Artikel ini menjelaskan aturan Pembatasan Pengalaman Pengguna Mobil (UX) yang dapat Anda gunakan untuk membuat beberapa konfigurasi aturan Pembatasan UX (misalnya, Uni Eropa versus Jepang) dan kemudian menentukan kumpulan aturan mana yang akan diterapkan pada waktu berjalan. Untuk informasi lebih lanjut, lihat CarUxRestrictions .
Layanan Pembatasan UX Mobil memungkinkan pengembang untuk menentukan konfigurasi Pembatasan UX Mobil baru. Jika pengembang ingin mengubah aturan pembatasan (seperti untuk mematuhi standar keamanan lokal), pengembang dapat menggunakan API untuk menentukan konfigurasi baru.
API untuk menyetel konfigurasi tetap ada di konfigurasi baru saja. Dengan kata lain, konfigurasi tidak langsung berlaku. Sebagai gantinya, konfigurasi baru dimuat saat layanan UX Restrictions dimulai ulang dan mobil berada di Park. Layanan mobil memastikan mobil berada di Taman sebelum memuat ulang konfigurasi baru.
Selain metode layanan Pembatasan UX yang baru, API disediakan untuk membuat konfigurasi. Keadaan pemilihan gigi dan kecepatan diubah menjadi salah satu dari tiga keadaan mengemudi:
- Diparkir . Perlengkapan di Taman.
- Pemalasan . Gear tidak di Park dan kecepatannya nol.
- Bergerak . Gear tidak di Park dan kecepatannya tidak nol.
Untuk mempelajari bagaimana aplikasi menggunakan status mengemudi mobil dan batasan UX yang sesuai, lihat Mengkonsumsi Kondisi Mengemudi Mobil dan Pembatasan UX .
Konfigurasi Pembatasan Berdasarkan Status Drive
Untuk mencegah gangguan pengemudi, Android memetakan status mengemudi ke serangkaian aturan Pembatasan UX (Pembatasan UX) (untuk daftar batasan, lihat attrs.xml ). Pertimbangkan aturan contoh ini:
- Diparkir . Tidak dibatasi.
- Pemalasan . Tidak ada video dan tidak ada layar konfigurasi.
- Bergerak . Sepenuhnya dibatasi (semua batasan diperlukan).
Pemetaan yang diilustrasikan di atas telah ditentukan sebelumnya dan dikonfigurasi sebagai sumber daya XML. Konfigurasi dicatat di car_ux_restrictions_map . Secara internal, CarUxRestrictionsManagerService mem-parsing aturan selama inisialisasi dan kemudian menyimpan aturan dalam memori. Layanan kemudian memetakan status mengemudi saat ini ke Pembatasan UX dan menyiarkan batasan saat ini ke seluruh sistem.
<!-- No restrictions when car is parked --> <DrivingState car:state="parked"> <Restrictions car:requiresDistractionOptimization="false" car:uxr="baseline"/> </DrivingState> <!-- Restrictions when car is idling --> <DrivingState car:state="idling"> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video|no_config"/> </DrivingState> <!-- Restrictions for speed >= 0 m/s --> <DrivingState car:state="moving" car:minSpeed="0.0"> <Restrictions car:requiresDistractionOptimization="true" car:uxr="fully_restricted"/> </DrivingState>
Konfigurasi untuk Beberapa Tampilan
Secara default, tidak ada batasan yang diterapkan pada tampilan tambahan. Untuk membuat konfigurasi pembatasan untuk beberapa tampilan, sertakan tag RestrictionMapping
dengan port fisik untuk tampilan tersebut. Pembatasan yang sesuai diterapkan secara otomatis ke setiap tampilan. Dalam contoh berikut, tampilan dengan ID Port fisik 1 dan 2 memiliki konfigurasi yang berbeda:
<RestrictionMapping car:physicalPort="1"> <DrivingState car:state="moving"> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_keyboard|no_video"/> </DrivingState> </RestrictionMapping> <RestrictionMapping car:physicalPort="2"> <DrivingState car:state="moving"> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/> </DrivingState> </RestrictionMapping>
Konfigurasi untuk Mode Pembatasan
Anda sekarang dapat memilih nama apa saja untuk mode tersebut, seperti teen . Dalam contoh berikut, batasan berbeda dikonfigurasi untuk mode default dan penumpang (sebelumnya, hanya mode penumpang yang didukung:
<DrivingState car:state="idling"> <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/> </DrivingState> </Restrictions>Anda dapat menggunakan API untuk menyetel nama string apa pun untuk mode tersebut. Misalnya, metode
setRestrictionMode(@NonNull String mode)
di CarUxRestrictionsManager. (Sebelumnya, Anda akan menggunakan metode setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
di CarUxRestrictionsManager).API Konfigurasi CarUxRestrictions
Pembatasan dengan CarUxRestrictionsConfiguration
Kelas baru CarUxRestrictionsConfiguration
dipetakan 1:1 ke skema konfigurasi XML saat ini. CarUxRestrictionsConfiguration
dapat dibuat dengan CarUxRestrictions. Builder
, yang memvalidasi konfigurasi pada build().
new CarUxRestrictionsConfiguration.Builder() // Explicitly set restrictions for each driving state. .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_PARKED, /* requiresOptimization= */ false, /* restrictions= */ UX_RESTRICTIONS_BASELINE) .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_IDLING, true, UX_RESTRICTIONS_NO_VIDEO|UX_RESTRICTIONS_NO_SETUP) .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_MOVING, true, UX_RESTRICTIONS_FULLY_RESTRICTED) // Set restriction parameters. .setMaxStringLength(int max) .setMaxCumulativeContentItems(int max) .setMaxContentDepth(int max) // Build a new CarUxRestrictionsConfiguration. .build();
API CarUxRestrictionsManager
Setel CarUxRestrictionsConfiguration
untuk perjalanan berikutnya dengan CarUxRestrictionsManager
. Metode ini memerlukan izin, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION
.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot( CarUxRestrictionsConfiguration config);
Pertahankan Konfigurasi Pembatasan UX Baru
Ketika konfigurasi baru diteruskan, layanan UX Restrictions mengembalikan boolean untuk menunjukkan apakah konfigurasi baru telah berhasil disimpan. Konfigurasi baru ini hanya digunakan ketika Integrated Head Unit (IHU) dihidupkan ulang dan mobil diparkir. Secara internal, layanan UX Restrictions berisi dua set konfigurasi:
- Produksi . Meskipun opsional, konfigurasi ini sering ada. Layanan UX Restrictions membaca konfigurasi ini saat memulai.
- Dipentaskan . Juga opsional, konfigurasi ini tidak berpengaruh pada Pembatasan UX dan dipromosikan ke Produksi saat layanan mobil dimulai dan saat mobil diparkir.
Gambar 1. Konfigurasi produksi
Alamat Kegagalan
Sampai informasi status mengemudi diterima dari CarPropertyManager (misalnya, selama boot-up), Pembatasan UX tidak akan diberlakukan. Sistem akan bekerja seolah-olah keadaan mengemudi diparkir.
Jika pembacaan konfigurasi yang disimpan gagal (misalnya, hasil SettingNotFoundException), layanan UX Restrictions akan kembali ke mode hard-coded, sepenuhnya dibatasi:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
Status Mengemudi dan Batasan Pengguna
Konten berikut menjelaskan interaksi yang ditampilkan dalam diagram desain berikut:
Gambar 2. Interaksi status penggerak
Properti yang Digunakan untuk Menurunkan Status Mengemudi
Gunakan tiga VehiclePropertyIds
berikut untuk mendapatkan status mengemudi:
API Tersedia untuk Aplikasi
Kode berada di lokasi berikut:
Kode | Lokasi |
---|---|
CarUxRestrictionsManager API publik untuk mendaftar perubahan Batasan UX. | /packages/services/Car/+/master/car-lib/src/android/car/drivingstate/CarUxRestrictionsManager.java |
CarUxRestrictions Definisi pembatasan UX. | /packages/services/Car/+/master/car-lib/src/android/car/drivingstate/CarUxRestrictions.java |
CarDrivingStateManager API Sistem untuk mendaftar guna mendorong perubahan status. | /packages/services/Car/+/master/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java |
Untuk mensimulasikan status mengemudi, lihat Pengujian .