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

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

Ş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 |
|---|---|
CarUxRestrictionsManagerKullanı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
|
CarUxRestrictionsKullanı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.