Sebelum melanjutkan, tinjau Panduan Gangguan Mengemudi.
Halaman ini menjelaskan aturan Pembatasan Pengalaman Pengguna (UX) Mobil yang dapat Anda gunakan untuk membuat beberapa konfigurasi aturan Pembatasan UX (misalnya, Uni Eropa versus Jepang), lalu menentukan kumpulan aturan yang akan diterapkan pada waktu proses. Untuk mengetahui informasi selengkapnya, lihat CarUxRestrictions.
Layanan Batasan UX Mobil memungkinkan developer menentukan konfigurasi Batasan UX Mobil baru. Jika developer ingin mengubah aturan pembatasan (seperti untuk mematuhi standar keamanan lokal), developer dapat menggunakan API untuk menentukan konfigurasi baru.
API untuk menetapkan konfigurasi hanya tetap ada di konfigurasi baru. Dengan kata lain, konfigurasi tidak langsung berlaku. Sebagai gantinya, konfigurasi baru dimuat saat layanan Batasan UX dimulai ulang dan mobil dalam posisi Parkir. Layanan mobil memastikan mobil berada dalam posisi Parkir sebelum memuat ulang konfigurasi baru.
Selain metode layanan Pembatasan UX baru, API disediakan untuk membuat konfigurasi. Status pemilihan gigi dan kecepatan dikonversi menjadi salah satu dari tiga status mengemudi:
- Terparkir. Gigi di posisi Parkir.
- Idling. Gigi tidak di posisi Parkir dan kecepatan nol.
- Pindah. Gigi tidak di posisi Parkir dan kecepatan tidak nol.
Untuk mempelajari cara aplikasi menggunakan status mengemudi mobil dan batasan UX yang sesuai, lihat Menggunakan Status Mengemudi Mobil dan Batasan UX.
Konfigurasi batasan berdasarkan kondisi berkendara
Untuk mencegah gangguan pengemudi, Android memetakan status mengemudi ke serangkaian Pembatasan UX
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- Terparkir. Tidak dibatasi.
- Idling. Tidak ada video dan tidak ada layar konfigurasi.
- Pindah. Dibatasi sepenuhnya (semua batasan diperlukan).
Pemetaan yang diilustrasikan di atas telah ditentukan sebelumnya dan dikonfigurasi sebagai resource XML. /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
kemudian akan menyimpan aturan dalam memori. Layanan kemudian memetakan status mengemudi saat ini ke Pembatasan UX
dan menyiarkan pembatasan 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 layar
Secara default, tidak ada batasan yang diterapkan ke layar tambahan. Untuk membuat konfigurasi
batasan untuk beberapa layar, sertakan tag RestrictionMapping
dengan
physicalPort untuk layar tersebut. Pembatasan yang sesuai akan otomatis diterapkan ke setiap
layar. Dalam contoh berikut, layar 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 dapat memilih nama apa pun untuk mode tersebut, seperti remaja. Pada contoh berikut, pembatasan yang 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>
setRestrictionMode(@NonNull String mode)
di CarUxRestrictionsManager.
(Sebelumnya, Anda akan menggunakan
metode setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
di
CarUxRestrictionsManager).
CarUxRestrictionsConfiguration API
Pembatasan dengan CarUxRestrictionsConfiguration
Class baru CarUxRestrictionsConfiguration
dipetakan 1:1 ke skema konfigurasi XML
saat ini. CarUxRestrictionsConfiguration
dapat dibuat dengan CarUxRestrictions.
, yang memvalidasi konfigurasi
setelah 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();
CarUxRestrictionsManager API
Tetapkan CarUxRestrictionsConfiguration
untuk drive berikutnya dengan CarUxRestrictionsManager
. Metode ini memerlukan izin,
Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION
.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot( CarUxRestrictionsConfiguration config);
Mempertahankan konfigurasi Batasan UX baru
Saat konfigurasi baru diteruskan, layanan Batasan UX akan menampilkan boolean untuk menunjukkan apakah konfigurasi baru berhasil disimpan. Konfigurasi baru ini hanya digunakan saat Integrated Head Unit (IHU) dimulai ulang dan mobil diparkir. Secara internal, layanan Pembatasan UX berisi dua kumpulan konfigurasi:
- Produksi. Meskipun bersifat opsional, konfigurasi ini sering kali ada. Layanan Batasan UX membaca konfigurasi ini saat memulai.
- Bertahap. Konfigurasi ini juga bersifat opsional, tidak memengaruhi Batasan UX, dan dipromosikan ke Produksi saat layanan mobil dimulai dan saat mobil diparkir.
Gambar 1. Konfigurasi produksi
Kegagalan alamat
Hingga informasi status mengemudi diterima dari CarPropertyManager (misalnya, selama proses booting), Batasan UX tidak akan diterapkan. Sistem berperilaku seolah-olah status mengemudi adalah Parkir.
Jika pembacaan konfigurasi tersimpan gagal (misalnya, hasil SettingNotFoundException), layanan Batasan UX akan kembali ke mode hard code yang 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 mengemudi
Properti yang digunakan untuk mendapatkan status mengemudi
Gunakan tiga VehiclePropertyIds
berikut untuk mendapatkan status mengemudi:
API yang tersedia untuk aplikasi
Kode tersebut berada di lokasi berikut:
Kode | Lokasi |
---|---|
CarUxRestrictionsManager API publik untuk mendaftar ke perubahan Pembatasan UX. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictions Definisi batasan UX. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarDrivingStateManager
API sistem untuk mendaftarkan perubahan status mengemudi. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
Untuk menyimulasikan status mengemudi, lihat Pengujian.