โปรดอ่านหลักเกณฑ์เกี่ยวกับสิ่งรบกวนการขับขี่ก่อนดำเนินการต่อ
หน้านี้อธิบายกฎข้อจำกัดด้านประสบการณ์ของผู้ใช้ (UX) ของรถยนต์ที่คุณสามารถใช้เพื่อสร้างการกำหนดค่ากฎข้อจำกัดด้าน UX หลายรายการ (เช่น สหภาพยุโรปกับญี่ปุ่น) จากนั้นจึงกำหนดชุดกฎที่จะใช้เมื่อรันไทม์ ดูข้อมูลเพิ่มเติมได้ที่ CarUxRestrictions
บริการข้อจำกัด UX ของรถยนต์ช่วยให้นักพัฒนาแอปกำหนดการกำหนดค่าข้อจำกัด UX ของรถยนต์ใหม่ได้ หากนักพัฒนาแอปต้องการแก้ไขกฎข้อจำกัด (เช่น เพื่อให้เป็นไปตามมาตรฐานความปลอดภัยในพื้นที่) นักพัฒนาแอปสามารถใช้ API เพื่อกำหนดการกำหนดค่าใหม่ได้
API สำหรับตั้งค่าการกําหนดค่าจะยังคงอยู่ในการกําหนดค่าใหม่เท่านั้น กล่าวคือ การกำหนดค่าจะไม่มีผลทันที แต่ระบบจะโหลดการกําหนดค่าใหม่เมื่อบริการข้อจํากัด UX เริ่มทํางานอีกครั้งและรถอยู่ในโหมดเข้าเกียร์จอด บริการซ่อมรถจะตรวจสอบว่ารถอยู่ในตำแหน่งเข้าเกียร์ P ก่อนที่จะโหลดการกำหนดค่าใหม่
นอกจากเมธอดบริการข้อจํากัด UX ใหม่แล้ว เรายังมี API ในการสร้างการกําหนดค่าด้วย ระบบจะแปลงสถานะการเลือกเกียร์และความเร็วเป็นสถานะการขับขี่อย่างใดอย่างหนึ่งต่อไปนี้
- หยุดทำงาน เกียร์อยู่ในตำแหน่ง P
 - ไม่มีการใช้งาน เกียร์ไม่ได้อยู่ในตำแหน่ง "P" และความเร็วเป็น 0
 - ย้าย เกียร์ไม่ได้อยู่ในตำแหน่ง P และความเร็วไม่ใช่ 0
 
หากต้องการดูวิธีที่แอปใช้สถานะการขับขี่ของรถยนต์และข้อจำกัด UX ที่เกี่ยวข้อง โปรดดูการใช้สถานะการขับขี่ของรถยนต์และข้อจำกัด UX
การกําหนดค่าข้อจํากัดตามสถานะไดรฟ์
Android จะจับคู่สถานะการขับรถกับชุดข้อจำกัด UX เพื่อไม่ให้ผู้ขับขี่เสียสมาธิ
    /packages/services/Car/+/android16-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- หยุดทำงาน ไม่จำกัด
 - ไม่มีการใช้งาน ไม่มีวิดีโอและไม่มีหน้าจอการกําหนดค่า
 - ย้าย ถูกจํากัดโดยสมบูรณ์ (ต้องใช้ข้อจํากัดทั้งหมด)
 
การแมปที่แสดงด้านบนได้รับการกําหนดไว้ล่วงหน้าและกำหนดค่าเป็นทรัพยากร XML จากนั้น /packages/services/Car/+/android16-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 กับ พอร์ตทางกายภาพ สำหรับจอแสดงผลนั้น ระบบจะนำข้อจำกัดที่เหมาะสมไปใช้กับจอแสดงผลแต่ละจอโดยอัตโนมัติ ในตัวอย่างต่อไปนี้ จอแสดงผลที่มีรหัสพอร์ตจริง 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 API
ข้อจำกัดที่มี 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 จะแสดงผลบูลีนเพื่อระบุว่าบันทึกการกําหนดค่าใหม่สําเร็จหรือไม่ ระบบจะใช้การกำหนดค่าใหม่นี้เฉพาะเมื่อ Integrated Head Unit (IHU) รีสตาร์ทและรถจอดอยู่เท่านั้น บริการข้อจำกัด UX มีการกำหนดค่า 2 ชุดภายในดังนี้
- เวอร์ชันที่ใช้งานจริง แม้ว่าจะไม่ใช่ข้อบังคับ แต่การกำหนดค่านี้มักจะมีให้ บริการข้อจำกัด UX จะอ่านการกำหนดค่านี้เมื่อเริ่มต้น
 - มีการกำหนดขั้นตอน นอกจากนี้ การกำหนดค่านี้จะไม่มีผลกับข้อจำกัด UX และได้รับการโปรโมตเป็นเวอร์ชันที่ใช้งานจริงเมื่อบริการรถเริ่มทำงานและเมื่อรถจอดอยู่
 

รูปที่ 1 การกำหนดค่าเวอร์ชันที่ใช้งานจริง
ที่อยู่ไม่สำเร็จ
ระบบจะไม่บังคับใช้ข้อจำกัด UX จนกว่าจะได้รับการแจ้งสถานะการขับขี่จาก CarPropertyManager (เช่น ระหว่างการบูต) ระบบจะทำงานเหมือนกับว่าสถานะการขับขี่คือ "จอดอยู่"
หากการอ่านการกําหนดค่าที่บันทึกไว้ไม่สําเร็จ (เช่น ผลลัพธ์ SettingNotFoundException) บริการข้อจํากัด UX จะกลับไปใช้โหมดที่จํากัดอย่างเต็มรูปแบบซึ่งมีการเขียนโค้ดไว้ล่วงหน้า ดังนี้
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
สถานะการขับขี่และข้อจํากัดของผู้ใช้
เนื้อหาต่อไปนี้อธิบายการโต้ตอบที่แสดงในแผนภาพการออกแบบต่อไปนี้

รูปที่ 2 การโต้ตอบกับสถานะการขับรถ
พร็อพเพอร์ตี้ที่ใช้หาสถานะการขับรถ
ใช้ VehiclePropertyIds 3 รายการต่อไปนี้เพื่อหาสถานะการขับขี่
API ที่พร้อมให้บริการแก่แอป
โค้ดจะอยู่ในตำแหน่งต่อไปนี้
| โค้ด | ตำแหน่ง | 
|---|---|
      CarUxRestrictionsManagerAPI สาธารณะเพื่อลงทะเบียนการเปลี่ยนแปลงข้อจํากัด UX  | 
    /packages/services/Car/+/android16-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
   | 
      CarUxRestrictionsคำจำกัดความของข้อจำกัด UX  | 
    /packages/services/Car/+/android16-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
   | 
      CarDrivingStateManager
    API ของระบบเพื่อลงทะเบียนการเปลี่ยนแปลงสถานะการขับรถ  | 
    /packages/services/Car/+/android16-release/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
     | 
  
หากต้องการจำลองสถานะการขับขี่ โปรดดูหัวข้อการทดสอบ