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

โปรดอ่านหลักเกณฑ์การรบกวนการขับรถก่อนดำเนินการต่อ

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

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

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

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

  • จอดรถแล้ว เกียร์รถในสวนสาธารณะ
  • ไม่มีการใช้งาน เกียร์ไม่อยู่ในจุดจอดและความเร็วเป็น 0
  • กำลังย้าย เกียร์ไม่อยู่ในจุดจอดและความเร็วไม่ได้อยู่ที่ 0

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

การกำหนดค่าการจำกัดตามสถานะของไดรฟ์

Android จะจับคู่สถานะการขับขี่กับชุดข้อจำกัด UX เพื่อป้องกันการเสียสมาธิของผู้ขับขี่ /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

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

การแมปที่แสดงข้างต้นมีการกำหนดค่าไว้ล่วงหน้าและกำหนดค่าเป็นทรัพยากร XML /packages/services/Car/+/main/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>
คุณจะใช้ API เพื่อตั้งชื่อสตริงให้กับโหมดนี้ได้ ตัวอย่างเช่น พารามิเตอร์ setRestrictionMode(@NonNull String mode) ใน CarUxRestrictionsManager (ก่อนหน้านี้คุณจะต้องใช้ setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) วิธีใน CarUxRestrictionsManager)

API ของ CarUxRestrictionsConfiguration

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

คลาสใหม่ CarUxRestrictionsConfiguration แมป 1:1 กับ XML ปัจจุบันแล้ว สคีมาการกำหนดค่า CarUxRestrictionsConfiguration สามารถสร้างขึ้นด้วย CarUxRestrictions.Builder ซึ่งจะตรวจสอบการกำหนดค่า จาก 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 วิธีนี้ต้องได้รับสิทธิ์ Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

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

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

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

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

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

จัดการความล้มเหลว

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

หากการอ่านการกำหนดค่าที่บันทึกไว้ล้มเหลว (เช่น ผลลัพธ์ SettingsNotFoundException) บริการการจำกัด UX กลับไปใช้โหมดที่จำกัดแบบฮาร์ดโค้ดโดยสมบูรณ์ ดังนี้

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

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

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

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

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

พร็อพเพอร์ตี้ที่ใช้ดึงข้อมูลสถานะการขับรถ

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

API ที่พร้อมใช้งานสำหรับแอป

รหัสจะอยู่ในตำแหน่งต่อไปนี้

โค้ด ตำแหน่ง
CarUxRestrictionsManager
API สาธารณะสำหรับลงทะเบียนการเปลี่ยนแปลงข้อจำกัด UX
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
คำจำกัดความของข้อจำกัด UX
/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

ในการจำลองสถานะการขับรถ โปรดดู การทดสอบ