โปรดอ่านหลักเกณฑ์การไม่วอกแวกขณะขับรถก่อนอ่านหน้านี้
หน้านี้อธิบายกฎข้อจำกัดด้านประสบการณ์ของผู้ใช้ (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>setRestrictionMode(@NonNull String mode) ใน CarUxRestrictionsManager
(ก่อนหน้านี้คุณจะใช้เมธอด setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) ใน CarUxRestrictionsManager)
API ของ CarUxRestrictionsConfiguration
ข้อจำกัดที่มี CarUxRestrictionsConfiguration
คลาสใหม่ CarUxRestrictionsConfiguration จะจับคู่แบบ 1:1 กับสคีมาการกำหนดค่า XML ปัจจุบัน CarUxRestrictionsConfiguration สร้างได้ด้วย CarUxRestrictions. ซึ่งจะตรวจสอบการกำหนดค่า
เมื่อสร้าง()
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 ที่แอปใช้ได้
โค้ดจะอยู่ในตำแหน่งต่อไปนี้
| โค้ด | ตำแหน่ง |
|---|---|
CarUxRestrictionsManagerAPI สาธารณะสำหรับการลงทะเบียนเพื่อรับการเปลี่ยนแปลงข้อจำกัด 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
|
ดูวิธีจำลองสถานะการขับขี่ได้ที่ การทดสอบ