قيود تجربة مستخدم السيارة

قبل المتابعة، قم بمراجعة إرشادات تشتيت انتباه القيادة .

تصف هذه الصفحة قواعد قيود تجربة مستخدم السيارة (UX) التي يمكنك استخدامها لإنشاء تكوينات متعددة لقاعدة قيود تجربة المستخدم (على سبيل المثال، الاتحاد الأوروبي مقابل اليابان) ثم تحديد مجموعة القواعد التي سيتم تطبيقها في وقت التشغيل. لمزيد من المعلومات، راجع CarUxRestrictions .

تتيح خدمة قيود تجربة المستخدم للسيارة للمطورين إمكانية تحديد تكوين قيود تجربة المستخدم الجديدة للسيارة. إذا أراد المطور تعديل قواعد التقييد (مثل الامتثال لمعايير السلامة المحلية)، فيمكن للمطور استخدام واجهة برمجة التطبيقات لتحديد التكوين الجديد.

تستمر واجهة برمجة التطبيقات (API) لتعيين التكوين في التكوين الجديد فقط. بمعنى آخر، لا يسري التكوين على الفور. وبدلاً من ذلك، يتم تحميل التكوين الجديد عند إعادة تشغيل خدمة قيود UX وتكون السيارة في وضع الوقوف. تتأكد خدمة السيارات من وجود السيارة في وضع الوقوف قبل إعادة تحميل التكوين الجديد.

بالإضافة إلى طريقة خدمة قيود UX الجديدة، يتم توفير واجهات برمجة التطبيقات لإنشاء التكوين. يتم تحويل حالة اختيار الترس والسرعة إلى إحدى حالات القيادة الثلاث:

  • متوقفة. جير في بارك.
  • تسكع. الترس ليس في وضع الوقوف والسرعة صفر.
  • متحرك. العتاد ليس في وضع الوقوف والسرعة ليست صفراً.

لمعرفة كيفية استهلاك التطبيقات لحالة قيادة السيارة وقيود تجربة المستخدم المقابلة، راجع استهلاك حالة قيادة السيارة وقيود تجربة المستخدم .

تكوين القيود على أساس حالات محرك الأقراص

لمنع تشتيت انتباه السائق، يقوم Android بتعيين حالة القيادة لمجموعة من قيود 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>
يمكنك استخدام واجهة برمجة التطبيقات لتعيين أي اسم سلسلة للوضع. على سبيل المثال، طريقة setRestrictionMode(@NonNull String mode) في CarUxRestrictionsManager. (في السابق، كنت تستخدم طريقة setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) في CarUxRestrictionsManager).

واجهات برمجة تطبيقات CarUxRestrictionsConfiguration

القيود المفروضة على CarUxRestrictionsConfiguration

تم تعيين الفئة الجديدة CarUxRestrictionsConfiguration بنسبة 1:1 إلى مخطط تكوين XML الحالي. يمكن إنشاء CarUxRestrictionsConfiguration باستخدام CarUxRestrictions. Builder ، الذي يتحقق من صحة التكوين عند البناء ().

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

قم بتعيين CarUxRestrictionsConfiguration لمحرك الأقراص التالي باستخدام CarUxRestrictionsManager . تتطلب هذه الطريقة إذنًا، Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION .

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

استمر في تكوين قيود UX الجديدة

عند تمرير تكوين جديد، تقوم خدمة قيود UX بإرجاع قيمة منطقية للإشارة إلى ما إذا كان التكوين الجديد قد تم حفظه بنجاح أم لا. يتم استخدام هذا التكوين الجديد فقط عند إعادة تشغيل الوحدة الرئيسية المدمجة (IHU) وتكون السيارة متوقفة. داخليًا، تحتوي خدمة قيود UX على مجموعتين من التكوينات:

  • إنتاج. على الرغم من أن هذا التكوين اختياري، إلا أنه غالبًا ما يكون موجودًا. تقرأ خدمة قيود UX هذا التكوين عند البدء.
  • نظموا. اختياري أيضًا، هذا التكوين ليس له أي تأثير على قيود UX ويتم ترقيته إلى الإنتاج عند بدء خدمة السيارة وعندما تكون السيارة متوقفة.

تكوين الإنتاج

الشكل 1. تكوين الإنتاج

معالجة الفشل

حتى يتم تلقي معلومات حالة القيادة من CarPropertyManager (على سبيل المثال، أثناء التمهيد)، لن يتم فرض قيود UX. يعمل النظام كما لو كانت حالة القيادة متوقفة.

في حالة فشل قراءة التكوين المحفوظ (على سبيل المثال، نتائجSettingNotFoundException)، تعود خدمة قيود UX إلى الوضع المقيد بالكامل والمشفر بالكامل:

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

حالة القيادة وقيود المستخدم

يصف المحتوى التالي التفاعلات المعروضة في مخطط التصميم التالي:

قيادة تفاعلات الحالة

الشكل 2. قيادة تفاعلات الحالة

الخصائص المستخدمة لاشتقاق حالة القيادة

استخدم VehiclePropertyIds الثلاثة التالية لاشتقاق حالة القيادة:

واجهات برمجة التطبيقات المتاحة للتطبيقات

الكود موجود في المواقع التالية:

شفرة موقع
CarUxRestrictionsManager
واجهات برمجة التطبيقات العامة للتسجيل لتغييرات قيود UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
تعريف قيود تجربة المستخدم.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
واجهات برمجة تطبيقات النظام للتسجيل لإجراء تغييرات الحالة.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

لمحاكاة حالات القيادة، راجع الاختبار .