محدودیت های تجربه کاربر خودرو

قبل از ادامه، دستورالعمل‌های حواس‌پرتی رانندگی را مرور کنید.

این صفحه قوانین محدودیت‌های تجربه کاربر خودرو (UX) را شرح می‌دهد که می‌توانید از آنها برای ایجاد چندین پیکربندی قوانین محدودیت‌های UX (به عنوان مثال، اتحادیه اروپا در مقابل ژاپن) استفاده کنید و سپس تعیین کنید که کدام مجموعه از قوانین در زمان اجرا اعمال شود. برای اطلاعات بیشتر، CarUxRestrictions را ببینید.

سرویس Car UX Restrictions به توسعه دهندگان این امکان را می دهد تا یک پیکربندی جدید Car UX Restrictions را تعریف کنند. اگر توسعه‌دهنده‌ای بخواهد قوانین محدودیت را تغییر دهد (مانند مطابقت با استانداردهای ایمنی محلی)، توسعه‌دهنده می‌تواند از API برای تعریف پیکربندی جدید استفاده کند.

API برای تنظیم پیکربندی فقط در پیکربندی جدید باقی می ماند. به عبارت دیگر، پیکربندی بلافاصله اعمال نمی شود. در عوض، پیکربندی جدید زمانی بارگذاری می‌شود که سرویس محدودیت‌های UX مجدداً راه‌اندازی شود و خودرو در پارک باشد. سرویس خودرو قبل از بارگیری مجدد پیکربندی جدید، اطمینان می‌دهد که خودرو در پارک است.

علاوه بر روش جدید سرویس محدودیت های UX، API هایی برای ساخت پیکربندی ارائه شده است. حالت انتخاب دنده و سرعت به یکی از سه حالت رانندگی تبدیل می شود:

  • پارک شده دنده در پارک.
  • بیکار. دنده در پارک نیست و سرعت صفر است.
  • در حال حرکت. دنده در پارک نیست و سرعت صفر نیست.

برای آشنایی با نحوه مصرف برنامه‌ها از وضعیت رانندگی خودرو و محدودیت‌های UX مربوطه، به مصرف وضعیت رانندگی خودرو و محدودیت‌های UX مراجعه کنید.

پیکربندی محدودیت بر اساس حالات درایو

برای جلوگیری از حواس‌پرتی راننده، اندروید وضعیت رانندگی را به مجموعه‌ای از محدودیت UX ترسیم می‌کند /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • پارک شده بدون محدودیت.
  • بیکار. بدون ویدئو و بدون صفحه پیکربندی.
  • در حال حرکت. کاملاً محدود شده (همه محدودیت ها لازم است).

نقشه ای که در بالا نشان داده شده است از پیش تعیین شده و به عنوان یک منبع XML پیکربندی شده است. این /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java سپس قوانین را در حافظه ذخیره می کند. سپس این سرویس وضعیت رانندگی فعلی را به محدودیت های UX ترسیم می کند و محدودیت های فعلی را برای کل سیستم پخش می کند.

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

تنظیمات برای نمایشگرهای متعدد

به طور پیش فرض، هیچ محدودیتی برای نمایشگرهای اضافی اعمال نمی شود. برای ایجاد تنظیمات محدودیت برای نمایشگرهای چندگانه، تگ RestrictionMapping را با پورت فیزیکی آن نمایشگر اضافه کنید. محدودیت های مناسب به طور خودکار برای هر نمایشگر اعمال می شود. در مثال زیر، نمایشگرهای با شناسه پورت فیزیکی 1 و 2 پیکربندی‌های متفاوتی دارند:

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

تنظیمات برای حالت های محدودیت

می توانید هر نامی را برای حالت انتخاب کنید، مانند نوجوان . در مثال زیر، محدودیت‌های مختلفی برای حالت‌های پیش‌فرض و مسافری پیکربندی شده‌اند (قبلاً فقط حالت مسافری پشتیبانی می‌شد):

<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 برای تنظیم هر نام رشته برای حالت استفاده کنید. به عنوان مثال، متد setRestrictionMode(@NonNull String mode) در CarUxRestrictionsManager. (قبلاً از متد setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) در CarUxRestrictionsManager استفاده می کردید).

API های CarUxRestrictionsConfiguration

محدودیت ها با CarUxRestrictionsConfiguration

کلاس جدید CarUxRestrictionsConfiguration 1:1 به طرح پیکربندی XML فعلی نگاشت شده است. CarUxRestrictionsConfiguration می توان با CarUxRestrictions. Builder ، که پیکربندی را بر اساس build() تایید می کند.

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

CarUxRestrictionsConfiguration برای درایو بعدی با CarUxRestrictionsManager تنظیم کنید. این روش به مجوز نیاز دارد، Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION .

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

پیکربندی محدودیت های UX جدید را ادامه دهید

هنگامی که یک پیکربندی جدید ارسال می‌شود، سرویس محدودیت‌های UX یک Boolean برمی‌گرداند تا نشان دهد که آیا پیکربندی جدید با موفقیت ذخیره شده است یا خیر. این پیکربندی جدید تنها زمانی استفاده می‌شود که واحد مرکزی یکپارچه (IHU) دوباره راه‌اندازی شود و خودرو پارک شده باشد. در داخل، سرویس محدودیت های UX شامل دو مجموعه پیکربندی است:

  • تولید. در حالی که اختیاری است، این پیکربندی اغلب وجود دارد. سرویس محدودیت‌های UX این پیکربندی را هنگام شروع می‌خواند.
  • صحنه سازی شد. همچنین اختیاری است، این پیکربندی هیچ تاثیری بر محدودیت‌های UX ندارد و با شروع سرویس خودرو و زمانی که خودرو پارک می‌شود به تولید ارتقا می‌یابد.

پیکربندی تولید

شکل 1. پیکربندی تولید

رفع اشکالات

تا زمانی که اطلاعات وضعیت رانندگی از CarPropertyManager دریافت نشود (مثلاً در هنگام راه‌اندازی)، محدودیت‌های UX اعمال نمی‌شوند. سیستم به گونه ای عمل می کند که گویی وضعیت رانندگی پارک شده است.

اگر خواندن پیکربندی ذخیره شده با شکست مواجه شود (به عنوان مثال، نتایج SettingNotFoundException)، سرویس UX Restrictions به حالت سخت کدگذاری شده و کاملاً محدود بازمی گردد:

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

وضعیت رانندگی و محدودیت های کاربر

محتوای زیر تعاملات نمایش داده شده در نمودار طراحی زیر را شرح می دهد:

محرک تعاملات دولت

شکل 2. تعاملات حالت محرک

ویژگی های مورد استفاده برای استخراج حالت رانندگی

از سه VehiclePropertyIds زیر برای استخراج حالت رانندگی استفاده کنید:

API های موجود برای برنامه ها

کد در مکان های زیر قرار دارد:

کد محل
CarUxRestrictionsManager
APIهای عمومی برای ثبت تغییرات محدودیت UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
تعریف محدودیت های UX
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
APIهای سیستم برای ثبت تغییرات وضعیت رانندگی.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

برای شبیه سازی حالت های رانندگی، به تست مراجعه کنید.