הגבלות על חוויית המשתמש ברכב

לפני שממשיכים, כדאי לעיין בהנחיות לגבי הסחות דעת בנהיגה.

בדף הזה מתוארים כללי ההגבלות על חוויית המשתמש ברכב (UX) שאפשר להשתמש בהם כדי ליצור כמה הגדרות של כללים להגבלות על חוויית המשתמש (למשל, האיחוד האירופי לעומת יפן) ואז לקבוע איזו קבוצת כללים תחול בזמן הריצה. מידע נוסף זמין במאמר הבא: CarUxRestrictions (הגבלות רכב).

השירות 'הגבלות על חוויית המשתמש ברכב' מאפשר למפתחים להגדיר הגבלות חדשות על חוויית המשתמש ברכב הגדרה אישית. אם מפתח ירצה לשנות את כללי ההגבלה (למשל כדי לציית להנחיות המקומיות). תקני בטיחות), המפתח יכול להשתמש ב-API כדי להגדיר את התצורה החדשה.

ה-API לקביעת ההגדרות יישמר רק עם ההגדרות החדשות. במילים אחרות, ההגדרה לא נכנסת לתוקף באופן מיידי. במקום זאת, התצורה החדשה נטענת כשהשירות להגבלות על חוויית המשתמש מופעל מחדש והמכונית נמצאת בחנייה. שירות הרכב מבטיח שהרכב נמצא ב'פארק' לפני שטוענים מחדש את התצורה החדשה.

בנוסף לשיטת השירות החדשה של ההגבלות על חוויית המשתמש, קיימים ממשקי 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 עם יציאה פיזית למסך הזה. ההגבלות המתאימות חלות באופן אוטומטי על כל חשבון מסך. בדוגמה הבאה, למסכים עם מזהי היציאה 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>

הגדרות של מצבי הגבלה

אפשר לבחור כל שם למצב, למשל Teen (בני נוער). בדוגמה הבאה, מוגדרות הגבלות שונות למצבי ברירת המחדל והנוסע (בעבר, הייתה תמיכה רק במצב נוסעים):

<DrivingState car:state="idling">
    <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
    <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>
אפשר להשתמש ב-API כדי להגדיר כל מחרוזת בשביל המצב. לדוגמה, השיטה setRestrictionMode(@NonNull String mode) ב-CarUxRestrictionsManager. (בעבר היה צריך להשתמש בפונקציה method אחת (setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)) ב- CarUxRestrictionsManager).

ממשקי API של CarUxRestrictionsConfiguration

הגבלות עם CarUxRestrictionsConfiguration

המחלקה החדשה CarUxRestrictionsConfiguration ממופה ביחס 1:1 ל-XML הנוכחי של הגדרות אישיות. אפשר לבנות את CarUxRestrictionsConfiguration עם CarUxRestrictions.Builder, מה שמאמת את ההגדרות on 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();

ממשק API של CarUxRestrictionsManager

צריך להגדיר CarUxRestrictionsConfiguration לנסיעה הבאה עם CarUxRestrictionsManager. ל-method הזה נדרשת הרשאה, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

שמירה על הגדרה חדשה של הגבלות UX

כשמוגדרת הגדרה חדשה, השירות UX מחזיר ערך בוליאני שמציין אם ההגדרה החדשה נשמרה. ההגדרה החדשה הזו בשימוש רק כאשר היחידה הראשית המשולבת (IHU) מופעלת מחדש והמכונית חונה. באופן פנימי, ההגבלות על חוויית המשתמש השירות מכיל שתי קבוצות של מערכי הגדרות אישיות:

  • הפקה. ההגדרות האישיות האלה הן אופציונליות, אבל לרוב הן קיימות. חוויית המשתמש שירות ההגבלות קורא את ההגדרה הזו כשמפעילים אותה.
  • מבוים. בנוסף, אופציונלי. להגדרה הזו אין השפעה על ההגבלות של חוויית המשתמש ומקודמת לייצור כשהשירות מתחיל וכשהמכונית חונה את הרכב.

תצורת ייצור

איור 1. תצורת ייצור

כשלים בכתובת

עד לקבלת מידע על מצב הנהיגה מ-CarPropertyManager (לדוגמה, במהלך אתחול), לא ייאכפו הגבלות UX. המערכת פועלת כאילו מצב הנהיגה בהמתנה.

אם קריאת הגדרה שנשמרה תיכשל (לדוגמה, תוצאות של SettingNotFoundבן), הערך של השירות 'הגבלות על חוויית המשתמש' (UX) יחזור למצב מוגבל בתוך הקוד:

// 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
הגדרת ההגבלות על חוויית המשתמש.
/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

כדי לדמות מצבי נהיגה, אפשר לעיין בדיקות.