Batasan Pengalaman Pengguna Mobil

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.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);

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.

Konfigurasi produksi

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:

Mendorong interaksi status

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.