Batasan Pengalaman Pengguna Mobil

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.

Konfigurasi produksi

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:

Mendorong interaksi status

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 .