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

ก่อนที่คุณจะดำเนินการต่อ โปรดอ่าน หลักเกณฑ์การเบี่ยงเบนความสนใจในการขับขี่

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

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

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

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

  • ที่จอดรถ. เกียร์อินพาร์ค
  • ไม่ได้ใช้งาน เกียร์ไม่เข้าจอดและความเร็วเป็นศูนย์
  • การย้าย. เกียร์ไม่เข้าจอดและความเร็วไม่เป็นศูนย์

หากต้องการเรียนรู้ว่าแอปใช้สถานะการขับขี่ของรถยนต์และข้อจำกัด 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 สำหรับจอแสดงผลนั้น ข้อจำกัดที่เหมาะสมจะนำไปใช้กับแต่ละจอแสดงผลโดยอัตโนมัติ ในตัวอย่างต่อไปนี้ จอแสดงผลที่มี Port Ids 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)

CarUxRestrictionsConfiguration API

ข้อจำกัดกับ 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();

CarUxRestrictionsManager API

ตั้งค่า CarUxRestrictionsConfiguration สำหรับไดรฟ์ถัดไปด้วย CarUxRestrictionsManager วิธีการนี้ต้องได้รับอนุญาต Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

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

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

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

การกำหนดค่าการผลิต

รูปที่ 1 การกำหนดค่าการผลิต

ที่อยู่ความล้มเหลว

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

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

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

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

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

ขับเคลื่อนปฏิสัมพันธ์ของรัฐ

รูปที่ 2 การขับเคลื่อนการโต้ตอบของรัฐ

คุณสมบัติที่ใช้ในการรับสถานะการขับขี่

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

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

หากต้องการจำลองสถานะการขับขี่ โปรดดูที่ การทดสอบ