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