กฎการจำกัดประสบการณ์ของผู้ใช้รถยนต์

โปรดอ่านหลักเกณฑ์การไม่วอกแวกขณะขับรถก่อนอ่านหน้านี้

หน้านี้อธิบายกฎข้อจำกัดด้านประสบการณ์ของผู้ใช้ (UX) ในรถยนต์ที่คุณใช้สร้างการกำหนดค่ากฎข้อจำกัด UX หลายรายการ (เช่น สหภาพยุโรปเทียบกับญี่ปุ่น) แล้วกำหนดชุดกฎที่จะใช้ในขณะรันไทม์ ดูข้อมูลเพิ่มเติมได้ที่ CarUxRestrictions.

บริการข้อจำกัด UX ในรถยนต์ช่วยให้นักพัฒนาแอปกำหนดค่าข้อจำกัด UX ในรถยนต์ใหม่ได้ หากนักพัฒนาแอปต้องการแก้ไขกฎข้อจำกัด (เช่น เพื่อให้เป็นไปตามมาตรฐานความปลอดภัยในท้องถิ่น) นักพัฒนาแอปสามารถใช้ API เพื่อกำหนดค่าใหม่ได้

API สำหรับตั้งค่าการกำหนดค่าจะยังคงอยู่ในการกำหนดค่าใหม่เท่านั้น กล่าวคือ การกำหนดค่า จะไม่ มีผลทันที แต่ระบบจะโหลดการกำหนดค่าใหม่เมื่อบริการข้อจำกัด UX รีสตาร์ท และ รถจอดอยู่ บริการรถยนต์จะตรวจสอบว่ารถจอดอยู่ก่อนที่จะโหลดการกำหนดค่าใหม่

นอกจากเมธอดบริการข้อจำกัด UX ใหม่แล้ว เรายังมี API ไว้สำหรับสร้างการกำหนดค่าด้วย ระบบจะแปลงสถานะการเลือกเกียร์และความเร็วเป็นสถานะการขับขี่ 1 ใน 3 สถานะต่อไปนี้

  • จอด เกียร์อยู่ในตำแหน่งจอด
  • เดินเบา เกียร์ไม่อยู่ในตำแหน่งจอดและความเร็วเป็น 0
  • เคลื่อนที่ เกียร์ไม่อยู่ในตำแหน่งจอดและความเร็วไม่เป็น 0

ดูวิธีที่แอปใช้สถานะการขับขี่ของรถยนต์และข้อจำกัด UX ที่เกี่ยวข้องได้ที่ ดู การใช้สถานะการขับขี่ของรถยนต์และข้อจำกัด UX

การกำหนดค่าข้อจำกัดตามสถานะการขับขี่

Android จะจับคู่สถานะการขับขี่กับชุดข้อจำกัด UX /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 จะบันทึกกฎไว้ในหน่วยความจำ จากนั้นบริการจะจับคู่สถานะการขับขี่ปัจจุบันกับข้อจำกัด UX และออกอากาศข้อจำกัดปัจจุบันไปยังทั้งระบบ

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

การกำหนดค่าสำหรับโหมดข้อจำกัด

คุณสามารถเลือกชื่อโหมดใดก็ได้ เช่น teen ตัวอย่างต่อไปนี้แสดงว่ามีการกำหนดค่าข้อจำกัดที่แตกต่างกันสำหรับโหมด default และ passenger (ก่อนหน้านี้รองรับเฉพาะโหมด passenger)

<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 (ก่อนหน้านี้คุณจะใช้เมธอด setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) ใน CarUxRestrictionsManager)

API ของ CarUxRestrictionsConfiguration

ข้อจำกัดที่มี CarUxRestrictionsConfiguration

คลาสใหม่ CarUxRestrictionsConfiguration จะจับคู่แบบ 1:1 กับสคีมาการกำหนดค่า XML ปัจจุบัน CarUxRestrictionsConfiguration สร้างได้ด้วย CarUxRestrictions.Builder ซึ่งจะตรวจสอบการกำหนดค่า เมื่อสร้าง()

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 เมธอดนี้ต้องได้รับสิทธิ์ Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

บันทึกการกำหนดค่าข้อจำกัด UX ใหม่

เมื่อมีการส่งการกำหนดค่าใหม่เข้ามา บริการข้อจำกัด UX จะแสดงผลบูลีนเพื่อระบุว่าระบบบันทึกการกำหนดค่าใหม่เรียบร้อยแล้วหรือไม่ ระบบจะใช้การกำหนดค่าใหม่นี้เมื่อหน่วยส่วนหัวแบบผสานรวม (IHU) รีสตาร์ทและรถจอดอยู่เท่านั้น ภายใน บริการข้อจำกัด UX จะมีการกำหนดค่า 2 ชุด ดังนี้

  • เวอร์ชันที่ใช้งานจริง การกำหนดค่านี้มักจะปรากฏขึ้น แม้ว่าจะเป็นตัวเลือกก็ตาม บริการข้อจำกัด UX จะอ่านการกำหนดค่านี้เมื่อเริ่มต้น
  • เวอร์ชันที่เตรียมใช้งาน การกำหนดค่านี้เป็นตัวเลือกเช่นกัน โดยจะไม่มีผลต่อข้อจำกัด UX และจะได้รับการเลื่อนระดับเป็นเวอร์ชันที่ใช้งานจริงเมื่อบริการรถยนต์เริ่มต้นและเมื่อรถจอดอยู่

การกำหนดค่าเวอร์ชันที่ใช้งานจริง

รูปที่ 1 การกำหนดค่าเวอร์ชันที่ใช้งานจริง

แก้ไขข้อผิดพลาด

ระบบจะไม่บังคับใช้ข้อจำกัด UX จนกว่าจะได้รับข้อมูลสถานะการขับขี่จาก CarPropertyManager (เช่น ระหว่างการบูตเครื่อง) ระบบจะทำงานราวกับว่าสถานะการขับขี่คือจอด

หากการอ่านการกำหนดค่าที่บันทึกไว้ล้มเหลว (เช่น เกิด SettingNotFoundException) บริการข้อจำกัด UX จะกลับไปใช้โหมดที่จำกัดอย่างเต็มที่ซึ่งมีการฮาร์ดโค้ดไว้

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

สถานะการขับขี่และข้อจำกัดของผู้ใช้

เนื้อหาต่อไปนี้อธิบายการโต้ตอบที่แสดงในแผนภาพการออกแบบต่อไปนี้

การโต้ตอบกับสถานะการขับรถ

รูปที่ 2 การโต้ตอบของสถานะการขับขี่

พร็อพเพอร์ตี้ที่ใช้ในการอนุมานสถานะการขับขี่

ใช้ VehiclePropertyIds 3 รายการต่อไปนี้เพื่ออนุมานสถานะการขับขี่

API ที่แอปใช้ได้

โค้ดจะอยู่ในตำแหน่งต่อไปนี้

โค้ด ตำแหน่ง
CarUxRestrictionsManager
API สาธารณะสำหรับการลงทะเบียนเพื่อรับการเปลี่ยนแปลงข้อจำกัด UX
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
คำจำกัดความของข้อจำกัด UX
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
API ของระบบสำหรับการลงทะเบียนเพื่อรับการเปลี่ยนแปลงสถานะการขับขี่
/packages/services/Car/+/android17-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

ดูวิธีจำลองสถานะการขับขี่ได้ที่ การทดสอบ