Sebelum melanjutkan, tinjau Panduan Gangguan Mendorong.
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) dan kemudian menentukan seperangkat aturan yang akan diterapkan pada waktu proses. Untuk informasi selengkapnya, lihat CarUxRestrictions.
Layanan Pembatasan UX Mobil memungkinkan developer untuk menentukan Pembatasan UX Mobil baru konfigurasi Anda. Jika developer ingin mengubah aturan pembatasan (seperti untuk mematuhi keamanan), developer dapat menggunakan API untuk menentukan konfigurasi baru.
API untuk menyetel konfigurasi hanya akan dipertahankan di konfigurasi baru. Dengan kata lain, {i>SUMIF<i} memiliki daftar sel konfigurasi tidak akan langsung diterapkan. Sebagai gantinya, konfigurasi baru dimuat saat layanan Pembatasan UX dimulai ulang dan mobil berada di Parkir. Servis mobil memastikan mobil berada di Parkir sebelum memuat ulang konfigurasi baru.
Selain metode layanan Pembatasan UX yang baru, API disediakan untuk membuat konfigurasi Anda. Status pemilihan dan kecepatan roda gigi dikonversi menjadi salah satu dari tiga status mengemudi:
- Terparkir. Persembahan di Park.
- Tidak ada aktivitas. Roda gigi tidak di parkir dan kecepatan adalah nol.
- Pindah. Roda gigi tidak di parkir dan kecepatan tidak nol.
Untuk mempelajari bagaimana aplikasi memakai status mengemudi mobil dan batasan UX yang sesuai, lihat Memakai Status Mengemudi Mobil dan Batasan UX.
Konfigurasi batasan berdasarkan status drive
Untuk mencegah gangguan bagi pengemudi, Android memetakan status mengemudi ke serangkaian Pembatasan UX
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- Terparkir. Tidak dibatasi.
- Tidak ada aktivitas. Tidak ada video dan tidak ada layar konfigurasi.
- Pindah. Dibatasi sepenuhnya (semua batasan diperlukan).
Pemetaan yang diilustrasikan di atas telah ditentukan sebelumnya dan dikonfigurasikan sebagai resource XML. Tujuan
/packages/services/Car/+/main/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 tampilan
Secara default, tidak ada batasan yang diterapkan pada tampilan tambahan. Untuk membuat batasan
untuk beberapa layar, sertakan tag RestrictionMapping
dengan
{i>fisikPort<i} untuk tampilan itu. Batasan yang sesuai akan
otomatis diterapkan pada
tampilan. Pada contoh berikut, tampilan dengan ID Port fisik 1 dan 2 memiliki
konfigurasi:
<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 mana pun untuk mode tersebut, seperti remaja. Dalam 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>Anda dapat menggunakan API untuk menetapkan nama string untuk mode. Misalnya, Metode
setRestrictionMode(@NonNull String mode)
di CarUxRestrictionsManager.
(Sebelumnya, Anda akan menggunakan
setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
metode di
CarUxRestrictionsManager).
CarUxRestrictionsConfiguration API
Pembatasan dengan CarUxRestrictionsConfiguration
Class baru CarUxRestrictionsConfiguration
dipetakan 1:1 ke XML saat ini
skema konfigurasi. CarUxRestrictionsConfiguration
dapat dibuat dengan CarUxRestrictions.
, 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);
Mempertahankan konfigurasi Pembatasan UX baru
Saat konfigurasi baru diteruskan, layanan Pembatasan UX akan menampilkan boolean untuk menunjukkan apakah konfigurasi baru berhasil disimpan atau belum. Konfigurasi baru ini hanya digunakan saat Integrated Head Unit (IHU) dimulai ulang dan mobil diparkir. Secara internal, Batasan UX berisi dua set konfigurasi:
- Produksi. Meskipun opsional, konfigurasi ini sering kali ada. UX Layanan pembatasan akan membaca konfigurasi ini saat memulai.
- Dirilis Bertahap untuk Pengujian. Juga opsional, konfigurasi ini tidak berpengaruh pada Pembatasan UX dan dipromosikan ke Produksi saat servis mobil dimulai dan saat mobil diparkir.
Gambar 1. Konfigurasi produksi
Kegagalan alamat
Hingga informasi status mengemudi diterima dari CarPropertyManager (misalnya, selama {i>boot-up<i}), Batasan UX tidak akan diterapkan. Sistem berfungsi seolah-olah status mengemudi Terparkir.
Jika terjadi kegagalan dalam membaca konfigurasi yang tersimpan (misalnya, hasil SettingNotFoundException), maka Layanan Pembatasan UX akan kembali ke mode hard code 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. Mendorong interaksi status
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 |
---|---|
CarUxRestrictionsManager
API Publik untuk mendaftar 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 mendaftar perubahan status mengemudi. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
Untuk menyimulasikan status mengemudi, lihat Pengujian.