القيود المفروضة على تجربة المستخدم في السيارة

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

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

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

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

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

  • معلّق: المعدات في متنزه.
  • عدم النشاط. الترس غير موجود في بارك والسرعة صفر.
  • نقل الترس غير موجود في الحديقة والسرعة ليست صفرًا.

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

إعداد التقييد استنادًا إلى حالات مساحة التخزين السحابي

لمنع تشتيت السائق، يربط نظام Android حالة القيادة بمجموعة من القيود على تجربة المستخدم. /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 ثم يحفظ القواعد في الذاكرة. تربط الخدمة حالة القيادة الحالية بقيود تجربة المستخدم وبث القيود الحالية على النظام بأكمله.

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

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

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

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

إعداد الإنتاج

الشكل 1. إعداد الإنتاج

تعذُّر العناوين

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

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

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

حالة القيادة والقيود المفروضة على المستخدمين

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

جذب المزيد من التفاعلات

الشكل 2. جذب المزيد من التفاعلات

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

استخدِم قيم VehiclePropertyIds الثلاثة التالية لاستنتاج حالة القيادة:

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

يكون الرمز متوفّرًا في المواقع التالية:

رمز الموقع الجغرافي

CarUxRestrictionsManager واجهات برمجة التطبيقات العامة للتسجيل في تغييرات قيود تجربة المستخدم.
/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

لمحاكاة حالات القيادة، اطّلِع على الاختبار: