Batasan Pengalaman Pengguna Mobil

Sebelum Anda melanjutkan, tinjau Pedoman Gangguan Mengemudi .

Halaman 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 proses. Untuk informasi selengkapnya, lihat CarUxRestrictions .

Layanan Pembatasan UX Mobil memungkinkan pengembang untuk menentukan konfigurasi Pembatasan UX Mobil baru. Jika pengembang ingin mengubah aturan pembatasan (misalnya untuk mematuhi standar keamanan lokal), pengembang dapat menggunakan API untuk menentukan konfigurasi baru.

API untuk menyetel konfigurasi hanya ada di konfigurasi baru. Dengan kata lain, konfigurasi tidak langsung berlaku. Sebaliknya, konfigurasi baru dimuat ketika layanan Pembatasan UX dimulai ulang dan mobil dalam keadaan Parkir. Service mobil memastikan mobil dalam kondisi Parkir sebelum memuat ulang konfigurasi baru.

Selain metode layanan Pembatasan UX yang baru, API disediakan untuk membuat konfigurasi. Status pemilihan gigi dan kecepatan diubah menjadi salah satu dari tiga status mengemudi:

  • Diparkir. Perlengkapan di Taman.
  • Pemalasan. Perlengkapan tidak di Parkir dan kecepatan nol.
  • Bergerak. Perlengkapan tidak di Parkir dan kecepatan tidak nol.

Untuk mempelajari cara aplikasi menggunakan status mengemudi mobil dan batasan UX yang terkait, lihat Menggunakan Status Mengemudi Mobil dan Pembatasan UX .

Konfigurasi pembatasan berdasarkan status drive

Untuk mencegah gangguan pengemudi, Android memetakan status mengemudi ke serangkaian Pembatasan UX /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Diparkir. Tidak dibatasi.
  • Pemalasan. Tidak ada video dan tidak ada layar konfigurasi.
  • Bergerak. Dibatasi sepenuhnya (semua pembatasan diperlukan).

Pemetaan yang diilustrasikan di atas telah ditentukan sebelumnya dan dikonfigurasikan sebagai sumber daya XML. Itu /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java lalu menyimpan aturan di 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 konfigurasi pembatasan untuk beberapa tampilan, sertakan tag RestrictionMapping dengan PhysicalPort untuk tampilan tersebut. Pembatasan yang sesuai secara otomatis diterapkan pada setiap tampilan. Dalam contoh berikut, tampilan dengan ID Port fisik 1 dan 2 memiliki konfigurasi 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, misalnya remaja . Dalam contoh berikut, batasan berbeda dikonfigurasikan untuk mode default dan mode 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 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 drive 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 Pembatasan UX mengembalikan boolean untuk menunjukkan apakah konfigurasi baru telah berhasil disimpan. Konfigurasi baru ini hanya digunakan saat Integrated Head Unit (IHU) restart 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 memulai.
  • Dipentaskan. Juga opsional, konfigurasi ini tidak berpengaruh pada Pembatasan UX dan dipromosikan ke Produksi saat servis mobil dimulai dan saat mobil diparkir.

Konfigurasi produksi

Gambar 1. Konfigurasi produksi

Mengatasi kegagalan

Hingga informasi status mengemudi diterima dari CarPropertyManager (misalnya, saat boot-up), Pembatasan UX tidak akan diterapkan. Sistem bekerja seolah-olah kondisi mengemudi sedang Diparkir.

Jika pembacaan konfigurasi tersimpan gagal (misalnya, hasil SettingNotFoundException), layanan Pembatasan UX kembali ke mode hard-code dan sepenuhnya dibatasi:

// Idling/moving state is fully restricted.
private static CarUxRestrictionsConfiguration generateDefaultConfig() {}

Pembatasan negara mengemudi dan pengguna

Konten berikut menjelaskan interaksi yang ditampilkan dalam diagram desain berikut:

Mendorong interaksi negara

Gambar 2. Mendorong interaksi negara

Properti yang digunakan untuk memperoleh 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 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 yang akan didaftarkan untuk mendorong perubahan status.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Untuk menyimulasikan status mengemudi, lihat Pengujian .