Araba sürüş durumu ve kullanıcı deneyimi kısıtlamalarını kullanma

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:

  1. Araba kitaplığı paketlerini içe aktarın:
    import android.car.Car;
    /* For CarUxRestrictions */
    import android.car.drivingstate.CarUxRestrictions;
    import android.car.drivingstate.CarUxRestrictionsManager;
  2. 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);
            }
        };
      
  3. 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
    }
  4. mCar.getCarManager() - mCarUxRestrictionsManager numaralı telefonu arayarak CarUxRestrictionsManager:
    CarUxRestrictionsManager carUxRestrictionsManager = (CarUxRestrictionsManager)
    mCar.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE);
  5. Yukarıdaki 2. adımda uygulanan mUxRChangeListener öğesini CarUxRestrictionsManager, 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:

  1. Dikkat dağıtıcı unsurların optimize edilmesi için şu anda bir şart var mı?
  2. 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:

  1. Hızı 0 olarak ayarlamak için:
    adb shell dumpsys activity service com.android.car inject-vhal-event 0x11600207 0
  2. 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
  3. 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
  4. 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