לפני שממשיכים, חשוב לעיין בהנחיות בנושא הסחת דעת בזמן נהיגה.
בדף הזה מתוארים כללי ההגבלות על חוויית המשתמש ברכב (UX) שאפשר להשתמש בהם כדי ליצור הגדרות מרובות של כללי הגבלות UX (לדוגמה, האיחוד האירופי לעומת יפן), ולאחר מכן לקבוע איזו קבוצת כללים תחול בזמן הריצה. מידע נוסף זמין במאמר CarUxRestrictions.
השירות 'הגבלות של חוויית משתמש ברכב' מאפשר למפתחים להגדיר הגדרה חדשה של הגבלות של חוויית משתמש ברכב. אם מפתח רוצה לשנות את כללי ההגבלות (למשל כדי לעמוד בתקני הבטיחות המקומיים), הוא יכול להשתמש ב-API כדי להגדיר את ההגדרה החדשה.
ה-API להגדרת ההגדרות נשאר בהגדרות החדשות בלבד. כלומר, ההגדרה לא נכנסת לתוקף באופן מיידי. במקום זאת, ההגדרה החדשה נטענת כשהשירות UX Restrictions מופעל מחדש וגם כשהמכונית במצב 'חניה'. שירות הרכב מוודא שהרכב נמצא במצב 'חניה' לפני שהוא טוען מחדש את ההגדרות החדשות.
בנוסף לשיטת השירות החדשה של הגבלות חוויית המשתמש, יש ממשקי API ליצירת ההגדרה. המצב של בחירת ההילוך והמהירות מומר לאחד משלושת מצבי הנהיגה:
- Parked ציוד במצב 'חניה'.
- פעילות לא פעילה ההילוך לא במצב 'חניה' והמהירות היא אפס.
- העברה. ההילוך לא במצב 'חניה' והמהירות לא אפס.
במאמר שימוש במצב הנהיגה של הרכב והגבלות על חוויית המשתמש מוסבר איך אפליקציות משתמשות במצב הנהיגה של הרכב ואילו הגבלות חלות על חוויית המשתמש.
הגדרת הגבלות על סמך מצבי הנסיעה
כדי למנוע הסחות דעת של הנהגים, מערכת Android ממפה את מצב הנהיגה לקבוצה של הגבלות על חוויית המשתמש
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- Parked ללא הגבלה.
- פעילות לא פעילה אין סרטון ואין מסך הגדרות.
- העברה. מוגבל באופן מלא (כל ההגבלות נדרשות).
המיפוי שמוצג למעלה נקבע מראש ומוגדר כמשאב 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).
ממשקי API של CarUxRestrictionsConfiguration
הגבלות באמצעות CarUxRestrictionsConfiguration
הכיתה החדשה CarUxRestrictionsConfiguration
ממופה ביחס 1:1 לסכימת התצורה הנוכחית של ה-XML. אפשר ליצור את 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 API
מגדירים את CarUxRestrictionsConfiguration
לנסיעה הבאה באמצעות CarUxRestrictionsManager
. לשיטה הזו נדרשת ההרשאה Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION
.
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot( CarUxRestrictionsConfiguration config);
שמירת הגדרה חדשה של הגבלות של חוויית משתמש (UX)
כשמקבלים הגדרה חדשה, השירות UX Restrictions מחזיר ערך בוליאני כדי לציין אם ההגדרה החדשה נשמרה. ההגדרה החדשה הזו משמשת רק כשהיחידה הראשית המשולבת (IHU) מופעלת מחדש והרכב חונה. מבפנים, השירות של הגבלות חוויית המשתמש מכיל שתי קבוצות של הגדרות:
- ייצור ההגדרה הזו היא אופציונלית, אבל היא מופיעה לעיתים קרובות. שירות ההגבלות של חוויית המשתמש קורא את ההגדרה הזו כשהוא מתחיל לפעול.
- מוכן להעברה ההגדרה הזו היא אופציונלית, ואין לה השפעה על הגבלות ממשק המשתמש. היא מועברת לייצור כשהשירות ברכב מתחיל וכשהרכב חונה.
איור 1. תצורת ייצור
טיפול בכשלים בכתובות
עד לקבלת מידע על מצב הנהיגה מ-CarPropertyManager (לדוגמה, במהלך ההפעלה), לא יתבצעו אכיפה של הגבלות על חוויית המשתמש. המערכת פועלת כאילו מצב הנהיגה הוא 'חניה'.
אם הקריאה של הגדרה שמורה נכשלת (לדוגמה, תוצאות של SettingNotFoundException), השירות של הגבלות על ממשק המשתמש חוזר למצב המוגבל לחלוטין שמוגדר מראש:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
מצב הנהיגה והגבלות על משתמשים
בתוכן הבא מתוארות האינטראקציות שמוצגות בתרשים העיצוב הבא:
איור 2. אינטראקציות במצב נהיגה
מאפיינים שמשמשים להסקת מצב הנהיגה
משתמשים בשלושת ה-VehiclePropertyIds
הבאים כדי להסיק את מצב הנסיעה:
ממשקי API שזמינים לאפליקציות
הקוד נמצא במיקומים הבאים:
קוד | מיקום |
---|---|
CarUxRestrictionsManager ממשקי API ציבוריים לצורך רישום לשינויים בהגבלות על ממשק המשתמש. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarUxRestrictions הגדרת הגבלות של חוויית משתמש (UX). |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
CarDrivingStateManager
ממשקי API למערכת לצורך רישום לשינויים במצב הנהיגה. |
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
|
כדי לדמות מצבי נהיגה, קראו את המאמר בדיקה.