قبل المتابعة، يُرجى مراجعة إرشادات تشتيت انتباه السائق.
تصف هذه الصفحة قواعد "قيود تجربة المستخدم في السيارة" التي يمكنك استخدامها لإنشاء إعدادات متعدّدة لقواعد "قيود تجربة المستخدم" (على سبيل المثال، الاتحاد الأوروبي مقابل اليابان)، ثم تحديد مجموعة القواعد التي سيتم تطبيقها في وقت التشغيل. لمزيد من المعلومات، يُرجى الاطّلاع على 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.، الذي يتحقّق من صحة الإعداد
عند استدعاء 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
|
لمحاكاة حالات القيادة، يُرجى الاطّلاع على الاختبار.