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

قبل قراءة هذه الصفحة، يُرجى قراءة إرشادات تشتيت انتباه السائق.

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

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

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

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

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

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

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

لمنع تشتيت انتباه السائق، تربط خرائط Android حالة القيادة بمجموعة من قيود تجربة المستخدم /packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • الركن. بدون قيود
  • السيارة في وضع التشغيل من دون حركة. لا فيديو ولا شاشة إعدادات
  • القيادة. مقيّدة بالكامل (يجب استيفاء جميع القيود)

إنّ عملية الربط الموضّحة أعلاه محدّدة مسبقًا وتم ضبطها كمورد XML. بعد ذلك، يحفظ /packages/services/Car/+/android17-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

القيود باستخدام 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

يمكنك ضبط CarUxRestrictionsConfiguration للقيادة التالية باستخدام CarUxRestrictionsManager. تتطلّب هذه الطريقة الإذن Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION.

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

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

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

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

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

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

معالجة حالات الفشل

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

في حال تعذّر قراءة إعداد محفوظ (على سبيل المثال، نتج عن ذلك SettingNotFoundException)، تعود خدمة "قيود تجربة المستخدم" إلى الوضع المرمّز نهائيًا والمقيّد بالكامل:

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

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

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

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

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

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

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

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

يظهر الرمز في المواقع الجغرافية التالية:

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

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