Bu sayfada, uygulamaların nasıl dikkat dağıtan unsurlara sorunsuz bir şekilde geçebileceği açıklanmaktadır optimize edilmiş (DO) kullanıcı arayüzleridir. Bu, bir arabanın sürüş durumunun nasıl tüketileceğini ve ilgili kullanıcı deneyimi kısıtlamalarını geçerlidir. Araba Kullanıcı Deneyimi (UX) kısıtlamaları hakkında daha fazla bilgi için bkz. Araç Kullanıcı Deneyimi Kısıtlamaları, Park edilmiş, Boşta ve Hareket halinde olan üç sürüş durumunu ayrıntılı bir şekilde görebilirsiniz.
Kitle
Bu içerik, dijital ortamdaki değişikliklere uyum sağlayan uygulamalar tasarlamak arabanın sürüş durumu ve ilgili uygulanan kullanıcı deneyimi kısıtlamaları.
Teknik ayrıntılar
Araba Sürüş Durumu Yöneticisi
Arabanın sürüş durumu (Park Edildi, Boşta Kalma veya Hareket Etme), sağlanan sensör değerlerinden türetilir: Araç Donanım Soyutlama Katmanı (VHAL). Araç hızı ve hız gibi temel sensör bilgileri geçerli vites seçimi, aracın o anki sürüş durumunu elde etmek için kullanılır.
CarDrivingStateEvent
.
@SystemApis sağlar, yani yalnızca Platform Internals, Bundled APK (SysUI veya
Ayarlar) ve Ayrıcalıklı APK'lar (ör.) GMSCore, API'lere erişebilir. API'ler,
android.car.permission.CAR_DRIVING_STATE
sürüş durumuna özel izinler. Müşteriler
ve sürüş durumu bilgilerine erişmesi gereken kullanıcılar bu izni istemelidir.
CarUxRestrictionsManager
Sürüş durumuna bağlı bir kullanıcı arayüzü gösteren uygulamalar
CarUxRestrictionsManager
,
Bu sayede, eşleştirmeyi sürüş durumundan kullanıcı deneyimi kısıtlamalarına soyutlayarak uygulamaların bunu yapmasına gerek kalmaz.
farklı pazar güvenliği şartlarına göre ayarlamalar yapabilirsiniz.
Not: Bu etkinlikler aşağıdaki şekilde işaretlenmelidir: açıklandığı gibi, dikkat dağıtma işlemi optimize edildi Sürücü dikkat dağıtıcısı yönergeleri bölümünde bulabilirsiniz. Etkinlikler uygun şekilde işaretlenmezse engellenir.
Bunun yerine, uygulamalar bir kontrol yerine CarUxRestrictionsManager tarafından kullanıcıyla ilgili herhangi bir şey için CarDriveStateManager tarafından gösterilen mutlak sürüş durumu veya kullanıcı deneyimi olabilir.
Kod örneği
Aşağıdaki örnek kod, bir uygulamanın kullanıcı deneyimi kısıtlamalarını nasıl izlediğini gösterir:
- Araba kitaplığı paketlerini içe aktarın:
import android.car.Car; /* For CarUxRestrictions */ import android.car.drivingstate.CarUxRestrictions; import android.car.drivingstate.CarUxRestrictionsManager;
. CarUxRestrictionManager.OnUxRestrictionsChangedListener
uygulayın (mUxRChangeListener
). Bu işleyici CarUxRestrictionsManager, kullanıcı deneyimi kısıtlamalarında bir değişiklik olduğunda çağrılır gerçekleşir. Kısıtlama değişikliklerini gerektiği gibi yerine getirerek dikkat dağıtıcı unsurları optimize edin:@Nullable private CarUxRestrictionsManager mCarUxRestrictionsManager; private CarUxRestrictions mCurrentUxRestrictions; /* Implement the onUxRestrictionsChangedListener interface */ private CarUxRestrictionsManager.OnUxRestrictionsChangedListener mUxrChangeListener = new CarUxRestrictionsManager.OnUxRestrictionsChangedListener() { @Override public void onUxRestrictionsChanged(CarUxRestrictions carUxRestrictions) { mCurrentUxRestrictions = carUxRestrictions; /* Handle the new restrictions */ handleUxRestrictionsChanged(carUxRestrictions); } };
.- mCar adında bir araba örneği oluşturmak ve araba hizmetine bağlanmak için araba API'lerini çağırın:
mCar = Car.createCar(context); if (mCar == null) { // handle car connection error }
. mCar.getCarManager() - mCarUxRestrictionsManager
numaralı telefonu arayarakCarUxRestrictionsManager
:CarUxRestrictionsManager carUxRestrictionsManager = (CarUxRestrictionsManager) mCar.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE);
- Yukarıdaki 2. adımda uygulanan
mUxRChangeListener
öğesiniCarUxRestrictionsManager
,mCarUxRestrictionsManager.registerListener()
için arama:mCarUxRestrictionsManager.registerListener(mUxrChangeListener); mUxrChangeListener.onUxRestrictionsChanged( mCarUxRestrictionsManager.getCurrentCarUxRestrictions());
Tamamlanan örnek kod bloğu (3. Adım ile 5. Adım arasında oluşturulan) işleyici ile sonuçlanır Drive durumu değiştiğinde kısıtlama değişiklikleri alma:
mCar = Car.createCar(context); if (mCar == null) { // handle car connection error } CarUxRestrictionsManager carUxRestrictionsManager = (CarUxRestrictionsManager) mCar.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE); mCarUxRestrictionsManager.registerListener(mUxrChangeListener); mUxrChangeListener.onUxRestrictionsChanged( mCarUxRestrictionsManager.getCurrentCarUxRestrictions());
CarUxKısıtlamaları
CarUxRestrictions nesnesi iki tür bilgi sağlar:
- Dikkat dağıtıcı unsurların optimize edilmesi için şu anda bir şart var mı?
- Cevabınız evet ise, şu anda hangi kısıtlamalar uygulanmaktadır?
CarUxRestrictions,
getCurrentUxRestrictions()
veya dinleyici geri araması, uygulamalar artık
isRequiresDistractionOptimization()
API kullanarak dikkat dağıtma işleminin
Optimize edilmiş
gereklidir. Bu işlem false
sonucunu döndürürse dikkat dağıtıcı olmak gerekmez
Bu uygulama optimize edilmiştir ve her türlü etkinliği güvenli bir şekilde çalıştırabilir.
Optimizasyon gerekiyorsa getActiveRestrictions() API'sini kullanarak kısıtlamaları ayarlayın. Bu
API, şu anda yürürlükte olan tüm kısıtlamaların bit maskesi olan int değerini döndürür. İlgili içeriği oluşturmak için kullanılan
Şu anda bildirilmiş olan kısıtlamalar grubu CarUxRestrictions
altında listelenmiştir.
Not: Kısıtlama grubunda dikkate alınması gereken durumlardır.
Örneğin bir uygulama, video oynatma kısıtlaması olup olmadığını belirlemek istiyorsa CarUxRestrictions nesnesini aldığında uygulamanın kısıtlamayı kontrol etmesi gerekir:
int activeUxR = mCurrentCarUxRestrictions.getActiveRestrictions(); if ((activeUxR & CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO) != 0) { handleStopPlayingVideo(); }
Sürüş Durumu
CarDriveStateManager, aracın gerçek sürüş durumunu gösterir (Park edilmiş, boşta veya Taşınıyor). CarDriveStateManager API'leri, CarUxRestrictionsManager'a benzer şekilde çağrılabilir. Uygulamalar bir dinleyici kaydedebilir veya mevcut sürüş durumunu öğrenebilir. Sürüş durumu döndürüldü olarak ekleyebilirsiniz.
CarDrivingStateEvent
.
değişiklik yapıldığında onDrivingStateChanged()
yöntemi, yeni
CarDrivingStateEvent
.
import android.car.Car; /* For CarDrivingState */ import android.car.drivingstate.CarDrivingStateEvent; import android.car.drivingstate.CarDrivingStateManager; mDrivingStateManager = (CarDrivingStateManager) mCar.getCarManager( Car.CAR_DRIVING_STATE_SERVICE); /* Register the listener (implemented below) */ mDrivingStateManager.registerListener(mDrivingStateEventListener); /* While we wait for a change to be notified, query the current state */ mDrivingStateEvent = mDrivingStateManager.getCurrentCarDrivingState(); private final CarDrivingStateManager.CarDrivingStateEventListener mDrivingStateEventListener = new CarDrivingStateManager.CarDrivingStateEventListener() { @Override public void onDrivingStateChanged(CarDrivingStateEvent event) { mDrivingStateEvent = event; /* handle the state change accordingly */ handleDrivingStateChange(); } };
Test
Sürüş durumunu değiştirmek için vites ve hız değişimini taklit edebilirsiniz. ADB kabuğu kullanma komutunu kullanabilirsiniz. Bu, geliştirme ve test için yararlı olabilir.
Sürüş etkinliklerini simüle etmek için:
- Hızı 0 olarak ayarlamak için:
adb shell dumpsys activity service com.android.car inject-vhal-event 0x11600207 0
. - Vitesleri Park edildi olarak ayarlamak için (CarDriveStateEvent'in PARKED olarak işaretlendiğini simüle etmek amacıyla):
adb shell dumpsys activity service com.android.car inject-vhal-event 0x11400400 4
. - Vites ayarını Drive'a ayarlamak için hız hâlâ 0'da (CarDriveStateEvent işaretini simüle etmek için)
IDLING'e):
adb shell dumpsys activity service com.android.car inject-vhal-event 0x11400400 8
. - Hızı saniye başına 30 metre olarak ayarlamak için (CarlingStateEvent'in MOVING değerine işaret etmesini simüle etmek amacıyla):
adb shell dumpsys activity service com.android.car inject-vhal-event 0x11600207 30
.