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

Devam etmeden önce Sürüş Sırasında Dikkat Dağıtma Yönergeleri'ni inceleyin.

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

Car UX Restrictions hizmeti, geliştiricilerin yeni bir Car UX Restrictions 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ı ayarlayan API yalnızca yeni yapılandırmada kalıcı olur. Diğer bir deyişle, yapılandırma hemen geçerli olmaz. Bunun yerine, yeni yapılandırma, UX Kısıtlamaları hizmeti yeniden başlatıldığında ve araba park hâlindeyken yüklenir. Araba servisi, yeni yapılandırma yeniden yüklenmeden önce arabanın park modunda olmasını sağlar.

Yeni UX Restrictions 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. Vites parkta olmalıdır.
  • Boşta kalma. 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, arabanın sürüş durumunu ve ilgili kullanıcı deneyimi kısıtlamalarını nasıl kullandığını öğrenmek için Consuming Car Driving State and UX Restrictions (Arabanın sürüş durumunu ve kullanıcı deneyimi kısıtlamalarını kullanma) başlıklı makaleyi inceleyin.

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

Android, sürücünün dikkatini dağıtmayı önlemek için sürüş durumunu bir dizi kullanıcı deneyimi kısıtlamasıyla eşler. /packages/services/Car/+/android16-qpr1-release/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 önceden belirlenir ve XML kaynağı olarak yapılandırılır. /packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java, 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ı 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. Birden fazla ekran için kısıtlama yapılandırmaları oluşturmak üzere RestrictionMapping etiketini ilgili ekranın physicalPort'u ile birlikte ekleyin. Her bir gösterime uygun kısıtlamalar otomatik olarak uygulanır. Aşağıdaki örnekte, fiziksel bağlantı noktası kimlikleri 1 ve 2 olan ekranların farklı yapılandırmaları vardır:

<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 çocuk 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>
API'yi kullanarak mod için herhangi bir dize adı ayarlayabilirsiniz. Örneğin, CarUxRestrictionsManager'daki setRestrictionMode(@NonNull String mode) yöntemi. (Daha önce, CarUxRestrictionsManager'da setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) yöntemi kullanılıyordu.)

CarUxRestrictionsConfiguration API'leri

CarUxRestrictionsConfiguration ile kısıtlamalar

Yeni sınıf CarUxRestrictionsConfiguration, mevcut XML yapılandırma şemasıyla 1:1 olarak eşlenir. CarUxRestrictionsConfiguration, yapılandırmayı build() üzerinde 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 Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION izni gerekir.

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ıldığında ve araba park edildiğinde 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ılırken bu yapılandırmayı okur.
  • Aşamalı. Bu yapılandırma isteğe bağlıdır, kullanıcı deneyimi kısıtlamaları üzerinde etkisi yoktur ve araç hizmeti başlatıldığında ve araç park edildiğinde üretim ortamına 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 sırasında) kullanıcı deneyimi kısıtlamaları uygulanmaz. Sistem, sürüş durumu Park Edilmiş gibi çalışır.

Kaydedilmiş bir yapılandırmanın okunması başarısız olursa (ör. SettingNotFoundException sonuçları), UX Restrictions hizmeti sabit kodlanmış, 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 özellikler

Sürüş durumunu belirlemek için aşağıdaki üç VehiclePropertyIds 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 herkese açık API'ler.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Kullanıcı deneyimi kısıtlamalarının tanımı.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
Araç kullanma durumundaki değişikliklere kaydolmak için kullanılan sistem API'leri.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

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