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

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

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

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

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

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

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

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

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

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

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

نگاشت نشان داده شده در بالا از پیش تعیین شده و به عنوان یک منبع XML پیکربندی شده است. سپس /packages/services/Car/+/android16-qpr1-release/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 به همراه physicalPort آن نمایشگر اضافه کنید. محدودیت‌های مناسب به طور خودکار برای هر نمایشگر اعمال می‌شوند. در مثال زیر، نمایشگرهایی با شناسه‌های پورت فیزیکی ۱ و ۲ پیکربندی‌های متفاوتی دارند:

<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

محدودیت‌های CarUxRestrictionsConfig

کلاس جدید CarUxRestrictionsConfiguration به صورت ۱:۱ به طرح پیکربندی 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();

API مدیریت محدودیت‌ها در CarUx

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

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

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

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

  • تولید. اگرچه این پیکربندی اختیاری است، اما اغلب وجود دارد. سرویس محدودیت‌های 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/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
تعریف محدودیت‌های UX
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
APIهای سیستم برای ثبت تغییرات وضعیت.
/packages/services/Car/+/android16-qpr1-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

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