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

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

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

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

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

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

  • متوقّف يجب أن تكون السيارة في وضع الوقوف.
  • عدم النشاط ناقل الحركة ليس في وضع الركن والسرعة صفر
  • جارٍ النقل. ناقل الحركة ليس في وضع الركن والسرعة ليست صفرًا

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

إعدادات القيود استنادًا إلى حالات القيادة

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

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

القيود باستخدام CarUxRestrictionsConfiguration

يتم ربط الفئة الجديدة CarUxRestrictionsConfiguration بمخطط إعداد XML الحالي بنسبة 1:1. يمكن إنشاء 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);

الاحتفاظ بإعدادات جديدة لقيود تجربة المستخدم

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

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

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

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

حالات تعذُّر إرسال الرسائل إلى العناوين

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

في حال تعذّر قراءة إعداد تم حفظه (على سبيل المثال، ظهور SettingNotFoundException)، يعود تطبيق UX Restrictions إلى الوضع المقيّد بالكامل والمبرمَج مسبقًا:

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

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

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

تفاعلات وضع القيادة

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

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

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

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

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

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

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