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

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

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

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

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

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

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

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

ضبط القيود استنادًا إلى حالات محرك الأقراص

لمنع تشتيت انتباه السائق، يربط 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 مع 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 بنسبة 1:1 بمخطّط الإعدادات الحالي بتنسيق 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();

CarUxRestrictionsManager API

اضبط CarUxRestrictionsConfiguration للرحلة التالية باستخدام CarUxRestrictionsManager. تتطلّب هذه الطريقة الحصول على إذن، Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION.

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

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

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

  • الإنتاج: غالبًا ما يكون هذا الإعداد متاحًا، إلا أنّه اختياري. تقرأ خدمة UX القيود هذه الإعدادات عند بدء التشغيل.
  • مرحلة الطرح هذا الإعداد اختياري أيضًا، ولا يؤثر في قيود تجربة المستخدم، ويُعرَض في قناة الإصدار العلني عند بدء خدمة السيارة وعند ركنها.

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

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

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

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

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

// 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

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