Araba Kullanıcı Deneyimi Kısıtlamaları

Devam etmeden önce Sürüş Sırasında Dikkati Dağıtan Unsurlarla İlgili Yönergeler'i inceleyin.

Bu sayfada, birden fazla kullanıcı deneyimi kısıtlaması kural yapılandırması (ör. Avrupa Birliği ve Japonya) oluşturmak ve ardından çalışma zamanında hangi kural grubunun uygulanacağını belirlemek için kullanabileceğiniz araç kullanıcı deneyimi (UX) kısıtlamaları kuralları açıklanmaktadır. Daha fazla bilgi için CarUxRestrictions konusuna bakın.

Araba Kullanıcı Deneyimi Kısıtlamaları hizmeti, geliştiricilerin yeni bir Araba Kullanıcı Deneyimi Kısıtlamaları yapılandırması tanımlamasına olanak tanır. Bir geliştirici, kısıtlama kurallarını değiştirmek isterse (ör. yerel güvenlik standartlarına uymak için) yeni yapılandırmayı tanımlamak üzere API'yi kullanabilir.

Yapılandırmayı ayarlayacak API yalnızca yeni yapılandırmada kalır. Diğer bir deyişle, yapılandırma hemen geçerli olmaz. Bunun yerine, yeni yapılandırma, kullanıcı deneyimi kısıtlamaları hizmeti yeniden başlatıldığında ve araç Park konumundayken yüklenir. Araç servisi, yeni yapılandırmayı yeniden yüklemeden önce aracın Park konumunda olduğundan emin olur.

Yeni kullanıcı deneyimi 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 edildi. Parkta vites.
  • Devre dışı. Vites park konumunda değil ve hız sıfır.
  • Taşınma. Vites park konumunda değil ve hız sıfır değil.

Uygulamaların bir aracın sürüş durumunu nasıl kullandığını ve ilgili kullanıcı deneyimi kısıtlamalarını öğrenmek için Aracın sürüş durumunu kullanma ve kullanıcı deneyimi kısıtlamaları başlıklı makaleyi inceleyin.

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

Android, sürücünün dikkatinin dağılmasını önlemek için sürüş durumunu bir dizi kullanıcı deneyimi kısıtlamasıyla eşler. /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Park edildi. Kısıtlanmamış.
  • Devre dışı. Video ve yapılandırma ekranı yok.
  • Taşınma. Tamamen kısıtlanmış (tüm kısıtlamalar gereklidir).

Yukarıda gösterilen eşleme önceden belirlenmiş ve XML kaynağı olarak yapılandırılmıştır. /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java ardından kuralları belleğe kaydeder. Ardından hizmet, mevcut sürüş durumunu kullanıcı deneyimi kısıtlamalarıyla eşler ve mevcut kısıtlamaları sistemin tamamına 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 ekran yapılandırmaları

Varsayılan olarak ek ekranlara herhangi bir kısıtlama uygulanmaz. Birden fazla ekran için kısıtlama yapılandırmaları oluşturmak istiyorsanız ilgili ekranın fiziksel bağlantı noktasıyla birlikte 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 olan 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 (eskiden 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 sınıfındaki setRestrictionMode(@NonNull String mode) yöntemi. (Daha önce CarUxRestrictionsManager'da setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) yöntemini kullanıyordunuz.)

CarUxRestrictionsConfiguration API'leri

CarUxRestrictionsConfiguration ile kısıtlamalar

Yeni CarUxRestrictionsConfiguration sınıfı, mevcut XML yapılandırma şemasıyla 1:1 eşlenir. CarUxRestrictionsConfiguration, build() işlevi sonrasında yapılandırmayı doğrulayan CarUxRestrictions.Builder ile oluşturulabilir.

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

CarUxRestrictionsManager ile bir sonraki sürüş için CarUxRestrictionsConfiguration'ü ayarlayın. Bu yöntem için izin gerekir,Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION.

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Yeni bir kullanıcı deneyimi kısıtlamaları yapılandırmasını kalıcı hale getirme

Yeni bir yapılandırma iletildiğinde 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 yapılandırma yalnızca entegre ana birim (IHU) yeniden başlatılırken ve araç park halindeyken kullanılır. Kullanıcı Deneyimi Kısıtlamaları hizmeti dahili olarak iki yapılandırma grubu içerir:

  • Üretim. İsteğe bağlı olsa da bu yapılandırma genellikle mevcuttur. Kullanıcı Deneyimi Kısıtlamaları hizmeti, başlatıldığında bu yapılandırmayı okur.
  • Aşamalı. İsteğe bağlı olan bu yapılandırma, kullanıcı deneyimi kısıtlamalarını etkilemez ve araç servisi başladığında ve araç park edildiğinde üretime geçirilir.

Üretim yapılandırması

Şekil 1. Üretim yapılandırması

Adres hataları

CarPropertyManager'dan sürüş durumu bilgileri alıncaya kadar (ör. önyükleme sırasında) kullanıcı deneyimi kısıtlamaları uygulanmaz. Sistem, sürüş durumu Park edilmiş gibi çalışır.

Kayıtlı bir yapılandırma okunamazsa (ör. SettingNotFoundException sonucu) kullanıcı deneyimi 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çerikte, aşağıdaki tasarım şemasında gösterilen etkileşimler açıklanmaktadır:

Araç kullanma durumu etkileşimleri

Şekil 2. Araç kullanma durumu etkileşimleri

Sürüş durumunu belirlemek için kullanılan mülkler

Sürüş durumunu elde etmek için aşağıdaki üç VehiclePropertyIds değerini kullanın:

Uygulamaların kullanabileceği API'ler

Kod aşağıdaki konumlarda bulunur:

Kod Konum
CarUxRestrictionsManager
Kullanıcı deneyimi kısıtlama değişikliklerine kaydolmak için kullanılacak herkese açık API'ler.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Kullanıcı deneyimi kısıtlamaları tanımı.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
Araç kullanma durumundaki değişikliklere kaydolmak için sistem API'leri.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Sürüş durumlarını simüle etmek için Test bölümüne bakın.