Araç Kullanıcı Deneyimi Kısıtlamaları

Devam etmeden önce Sürüş Dikkat Dağıtma Kurallarını inceleyin.

Bu sayfada, birden fazla UX Kısıtlama kuralı yapılandırması (örneğin, Avrupa Birliği ve Japonya) oluşturmak ve ardından çalışma zamanında hangi kural kümesinin uygulanacağını belirlemek için kullanabileceğiniz Araç Kullanıcı Deneyimi (UX) Kısıtlamaları kuralları açıklanmaktadır. Daha fazla bilgi için bkz. CarUxRestrictions .

Araç UX Kısıtlamaları hizmeti, geliştiricilerin yeni bir Araç UX Kısıtlamaları yapılandırması tanımlamasına olanak tanır. Bir geliştiricinin kısıtlama kurallarını değiştirmek istemesi durumunda (yerel güvenlik standartlarına uymak gibi), geliştirici yeni yapılandırmayı tanımlamak için API'yi kullanabilir.

Yapılandırmayı ayarlamak için kullanılan API yalnızca yeni yapılandırmada kalır. Başka bir deyişle yapılandırma hemen etkili olmaz . Bunun yerine, UX Kısıtlamaları hizmeti yeniden başlatıldığında ve araç Park durumundayken yeni yapılandırma yüklenir. Araç servisi, yeni konfigürasyonu yeniden yüklemeden önce aracın Park konumunda olmasını sağlar.

Yeni UX Kısıtlamaları hizmet yöntemine ek olarak, yapılandırmayı oluşturmak için API'ler sağlanır. Vites seçimi ve hız durumu üç sürüş durumundan birine dönüştürülür:

  • Park edilmiş. Parkta vites.
  • Rölantide. Vites Parkta değil ve hız sıfır.
  • Hareketli. Vites Parkta değil ve hız sıfır değil.

Uygulamaların bir otomobilin sürüş durumunu ve ilgili UX kısıtlamalarını nasıl tükettiğini öğrenmek için bkz. Araç Sürüş Durumunu Kullanma ve UX Kısıtlamaları .

Sürücü durumlarına göre kısıtlama yapılandırması

Sürücünün dikkatinin dağılmasını önlemek için Android, sürüş durumunu bir dizi UX Kısıtlaması ile eşleştirir /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Park edilmiş. Sınırsız.
  • Rölantide. Video yok ve yapılandırma ekranı yok.
  • Hareketli. Tamamen kısıtlı (tüm kısıtlamalar gereklidir).

Yukarıda gösterilen eşleme, bir XML kaynağı olarak önceden belirlenmiş ve yapılandırılmıştır. /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java daha sonra kuralları belleğe kaydeder. Hizmet daha sonra mevcut sürüş durumunu UX Kısıtlamalarıyla eşleştirir ve mevcut kısıtlamaları tüm sisteme yayınlar.

<!-- 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>

Çoklu ekranlar için konfigürasyonlar

Varsayılan olarak ek ekranlara herhangi bir kısıtlama uygulanmaz. Birden fazla ekrana yönelik kısıtlama yapılandırmaları oluşturmak için, söz konusu ekranın fizikselPort'una RestrictionMapping etiketini ekleyin. Uygun kısıtlamalar her ekrana otomatik olarak uygulanır. Aşağıdaki örnekte, fiziksel Bağlantı Noktası Kimlikleri 1 ve 2'ye sahip ekranlar farklı yapılandırmalara sahiptir:

<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>

Kısıtlama modları için yapılandırmalar

Mod için genç gibi herhangi bir adı seçebilirsiniz. Aşağıdaki örnekte, varsayılan ve yolcu modları için farklı kısıtlamalar yapılandırılmıştır (daha önce yalnızca yolcu modu destekleniyordu):

<DrivingState car:state="idling">
    <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
    <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>
Mod için herhangi bir dize adı ayarlamak üzere API'yi kullanabilirsiniz. Örneğin, CarUxRestrictionsManager'daki setRestrictionMode(@NonNull String mode) yöntemi. (Daha önce CarUxRestrictionsManager'da setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) yöntemini kullanırdınız).

CarUxKısıtlamalarYapılandırma API'leri

CarUxRestrictionsConfiguration ile Kısıtlamalar

Yeni CarUxRestrictionsConfiguration sınıfı geçerli XML yapılandırma şemasına 1:1 eşlenir. CarUxRestrictionsConfiguration CarUxRestrictions. Builder , build() üzerine yapılandırmayı doğrular.

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'si

CarUxRestrictionsManager ile sonraki sürücü için CarUxRestrictionsConfiguration ayarlayın. Bu yöntem izin gerektirir, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION .

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Yeni bir UX Kısıtlamaları yapılandırmasını sürdürün

Yeni bir yapılandırma aktarıldığında, UX Kısıtlamaları hizmeti, yeni yapılandırmanın başarıyla kaydedilip kaydedilmediğini belirten bir boole değeri döndürür. Bu yeni konfigürasyon yalnızca Entegre Ana Ünite (IHU) yeniden başlatıldığında ve araç park edildiğinde kullanılır. Dahili olarak, UX Kısıtlamaları hizmeti iki yapılandırma kümesi içerir:

  • Üretme. İsteğe bağlı olmasına rağmen bu yapılandırma sıklıkla mevcuttur. UX Kısıtlamaları hizmeti, başlatılırken bu yapılandırmayı okur.
  • Aşamalı. Ayrıca isteğe bağlı olan bu yapılandırmanın UX Kısıtlamaları üzerinde hiçbir etkisi yoktur ve araç servisi başladığında ve araç park edildiğinde Üretime yükseltilir.

Üretim konfigürasyonu

Şekil 1. Üretim konfigürasyonu

Adres hataları

CarPropertyManager'dan sürüş durumu bilgileri alınana kadar (örneğin, başlatma sırasında), UX Kısıtlamaları uygulanmayacaktır. Sistem, sürüş durumu Park edilmiş gibi çalışır.

Kaydedilmiş bir yapılandırmanın okunması başarısız olursa (örneğin, SettingNotFoundException sonuçları), UX Kısıtlamaları hizmeti sabit kodlu, tamamen kısıtlanmış moda geri döner:

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

Sürüş durumu ve kullanıcı kısıtlamaları

Aşağıdaki içerik, aşağıdaki tasarım şemasında görüntülenen etkileşimleri açıklamaktadır:

Sürüş durumu etkileşimleri

Şekil 2. Sürüş durumu etkileşimleri

Sürüş durumunu türetmek için kullanılan özellikler

Sürüş durumunu türetmek için aşağıdaki üç VehiclePropertyIds kullanın:

Uygulamaların kullanabileceği API'ler

Kod aşağıdaki konumlarda bulunur:

Kod Konum
CarUxRestrictionsManager
UX Kısıtlama değişikliklerine kaydolmak için genel API'ler.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
UX kısıtlamaları tanımı.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
Durum değişikliklerini yönlendirmek için kaydolacak sistem API'leri.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Sürüş durumlarını simüle etmek için bkz. Test Etme .