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

Devam etmeden önce Dikkat Çekme Yönergeleri'ni inceleyin.

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

Araba Kullanıcı Deneyimi Kısıtlamaları hizmeti, geliştiricilerin yeni bir Araba Kullanıcı Deneyimi Kısıtlamaları'nı tanımlamasına olanak tanır. yapılandırma. Bir geliştirici kısıtlama kurallarını değiştirmek (örneğin, yerel güvenlik standartları) içeriyorsa 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 geçerlilik kazanmaz. Bunun yerine yeni yapılandırma Kullanıcı Deneyimi Kısıtlamaları hizmeti yeniden başlatıldığında ve araba Park pozisyonunda olduğunda yüklenir. Araba servisi yeni konfigürasyonu yeniden yüklemeden önce aracın Park'ta olduğundan emin olur.

Yeni Kullanıcı Deneyimi Kısıtlamaları hizmet yöntemine ek olarak, yapılandırma. Dişli seçiminin ve hızın durumu, üç sürüş durumundan birine dönüştürülür:

  • Park edildi. Park'taki ekipman.
  • Boşta kalma. Vites Park'ta değil ve hız sıfır.
  • Taşınma. Vites, Park'ta değil ve hız sıfır değil.

Uygulamaların bir arabanın sürüş durumunu nasıl kullandığını ve ilgili kullanıcı deneyimi kısıtlamalarını öğrenmek için Araç Sürüş Durumu ve Kullanıcı Deneyimi Kısıtlamaları adlı makaleyi inceleyin.

Sürücü durumlarına dayalı 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şleştirir /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java.

  • Park edildi. Kısıtlanmamış.
  • Boşta kalma. 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, bir XML kaynağı olarak önceden belirlenmiş ve yapılandırılmıştır. İlgili içeriği oluşturmak için kullanılan /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java. sonra kuralları belleğe kaydeder. Ardından hizmet, mevcut sürüş durumunu Kullanıcı Deneyimi Kısıtlamaları ile eşleştirir ve geçerli 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>

Birden fazla ekran için yapılandırmalar

Varsayılan olarak, ek ekranlara herhangi bir kısıtlama uygulanmaz. Kısıtlama oluşturmak için birden fazla ekran için yapılandırma kullanıyorsanız RestrictionMapping etiketini, fizikselPort'u ekleyin. Uygun kısıtlamalar, her bir etiket için görüntüleyin. Aşağıdaki örnekte, fiziksel Bağlantı Noktası Kimlikleri 1 ve 2 olan ekranlar farklı yapılandırma:

<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ıyla ilgili 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ılı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ını ayarlamak üzere API'yi kullanabilirsiniz. Örneğin, setRestrictionMode(@NonNull String mode) yöntemini kullanabilirsiniz. (Daha önce, setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) yöntemi CarUxRestrictionsManager).

CarUxRestrictionsConfiguration API'leri

CarUxRestrictionsConfiguration ile ilgili kısıtlamalar

Yeni CarUxRestrictionsConfiguration sınıfı, mevcut XML ile 1:1 oranında eşlendi. yapılandırma şeması. CarUxRestrictionsConfiguration, yapılandırmayı doğrulayan CarUxRestrictions.Builder ile oluşturulabilir. oluşturmak için kullanılır.

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'sı

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

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Yeni kullanıcı deneyimi kısıtlamaları yapılandırmasını kullanmaya devam etme

Yeni bir yapılandırma iletildiğinde, Kullanıcı Deneyimi Kısıtlamaları hizmeti, yeni yapılandırmanın başarıyla kaydedilip kaydedilmediğini kontrol edin. Bu yeni yapılandırma yalnızca Entegre ana birim (IHU) yeniden başlatılır ve araba park edilmiş olur. Kullanıcı deneyimi kısıtlamaları, şirket içinde hizmet 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şlatma sırasında bu yapılandırmayı okur.
  • Aşamalı. Ayrıca isteğe bağlı, bu yapılandırmanın kullanıcı deneyimi kısıtlamaları üzerinde etkisi yoktur. ve araba hizmeti başladığında ve araba park edildiğinde Üretim'e yükseltilir.

Üretim yapılandırması

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

Adres hataları

CarPropertyManager'dan sürüş durumu bilgileri alınana kadar (örneğin, başlatma) nedeniyle, Kullanıcı Deneyimi Kısıtlamaları zorunlu kılınmaz. Sistem, çalışma durumu "Sürüş durumu"muş gibi çalışır Park edildi.

Kayıtlı bir yapılandırma okunamazsa (örneğin, AdjustNotFoundException sonuçları), Kullanıcı Deneyimi Kısıtlamaları hizmeti sabit kodlu, tamamen kısıtlı moda geri dönüyor:

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

Araç kullanma durumu ve kullanıcı kısıtlamaları

Aşağıdaki içerikte, aşağıdaki tasarım şemasında görüntülenen etkileşimler açıklanmaktadır:

Durum etkileşimlerini artırma

Şekil 2. Durum etkileşimlerini artırma

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

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

Uygulamaların kullanabileceği API'ler

Bu kod aşağıdaki konumlarda bulunur:

Kod Konum

CarUxRestrictionsManager Kullanıcı deneyimi Kısıtlaması değişikliklerine kaydolmak için kullanılan herkese açık API'ler.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

CarUxRestrictions Kullanıcı deneyimi kısıtlamalarının tanımı.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager.
Sürüş durumu değişiklikleri için kaydedilecek sistem API'leri.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Sürüş durumunu simüle etmek için bkz. Test.