Sebelum Anda melanjutkan, tinjau Panduan Gangguan saat 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 saat runtime. 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 keselamatan lokal), developer dapat menggunakan API untuk menentukan konfigurasi baru.
API untuk menyetel konfigurasi hanya ada di konfigurasi baru. Dengan kata lain, konfigurasi tidak langsung berlaku. Sebagai gantinya, konfigurasi baru dimuat saat layanan Pembatasan UX dimulai ulang dan mobil dalam posisi Parkir. Layanan mobil memastikan mobil 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:
- Diparkir. Transmisi di Posisi Parkir.
- Nonaktif. Gigi tidak dalam posisi Parkir dan kecepatan nol.
- Pindah. Gigi tidak dalam posisi Parkir dan kecepatan tidak nol.
Untuk mempelajari cara aplikasi menggunakan status mengemudi mobil dan pembatasan UX yang sesuai, lihat Menggunakan Status Mengemudi Mobil dan Pembatasan UX.
Konfigurasi pembatasan berdasarkan kondisi berkendara
Untuk mencegah gangguan pengemudi, Android memetakan status mengemudi ke serangkaian Pembatasan UX
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- Diparkir. Tidak dibatasi.
- Nonaktif. 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/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
kemudian 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 pada layar tambahan. Untuk membuat konfigurasi pembatasan untuk beberapa layar, sertakan tag RestrictionMapping dengan physicalPort untuk layar tersebut. Pembatasan yang sesuai akan otomatis diterapkan pada setiap
tampilan. 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 ini, seperti remaja. Pada contoh berikut, batasan 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).
API CarUxRestrictionsConfiguration
Batasan dengan CarUxRestrictionsConfiguration
Class baru CarUxRestrictionsConfiguration dipetakan 1:1 ke skema konfigurasi XML saat ini. CarUxRestrictionsConfiguration dapat dibuat dengan CarUxRestrictions., yang memvalidasi konfigurasi
saat 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 perjalanan 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 Pembatasan UX akan menampilkan nilai boolean untuk menunjukkan apakah konfigurasi baru telah berhasil disimpan. Konfigurasi baru ini hanya digunakan saat Integrated Head Unit (IHU) dimulai ulang dan mobil diparkir. Secara internal, layanan Pembatasan UX berisi dua set konfigurasi:
- Produksi. Meskipun opsional, konfigurasi ini sering kali ada. Layanan Pembatasan UX membaca konfigurasi ini saat dimulai.
- Bertahap. Konfigurasi ini juga bersifat opsional dan tidak memengaruhi Pembatasan UX serta 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 boot-up), Pembatasan UX tidak akan diterapkan. Sistem berperilaku seolah-olah status mengemudi adalah Diparkir.
Jika membaca konfigurasi tersimpan gagal (misalnya, menghasilkan SettingNotFoundException), layanan Pembatasan UX akan kembali ke mode yang dikodekan secara permanen dan 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 berada di lokasi berikut:
| Kode | Lokasi |
|---|---|
CarUxRestrictionsManagerAPI publik untuk mendaftar perubahan Pembatasan UX. |
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictionsDefinisi batasan UX. |
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarDrivingStateManager
API sistem untuk mendaftar ke perubahan status mengemudi. |
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
Untuk menyimulasikan status mengemudi, lihat Pengujian.