Các hạn chế về trải nghiệm người dùng trên ô tô

Trước khi bạn tiếp tục, hãy xem Nguyên tắc lái xe.

Trang này mô tả các quy tắc Hạn chế về trải nghiệm người dùng trên ô tô (UX) mà bạn có thể sử dụng để tạo nhiều cấu hình quy tắc Hạn chế trải nghiệm người dùng (ví dụ: Liên minh Châu Âu so với Nhật Bản), sau đó xác định bộ quy tắc sẽ áp dụng vào thời gian chạy. Để biết thêm thông tin, hãy xem Hạn chế CarUx.

Dịch vụ Hạn chế về trải nghiệm người dùng trên ô tô giúp nhà phát triển xác định các Quy định hạn chế mới về trải nghiệm người dùng trên ô tô . Nếu nhà phát triển muốn sửa đổi các quy tắc hạn chế (chẳng hạn như để tuân thủ an toàn), nhà phát triển có thể sử dụng API để xác định cấu hình mới.

API để thiết lập cấu hình này chỉ tồn tại trong cấu hình mới. Nói cách khác, cấu hình không có hiệu lực ngay lập tức. Thay vào đó, cấu hình mới là tải khi dịch vụ Hạn chế trải nghiệm người dùng khởi động lại xe đang ở trạng thái đỗ. Dịch vụ xe hơi đảm bảo xe đang đỗ trước khi tải lại cấu hình mới.

Ngoài phương thức dịch vụ Hạn chế trải nghiệm người dùng mới, chúng tôi cung cấp các API để tạo . Trạng thái lựa chọn bánh răng và tốc độ được chuyển đổi thành một trong ba trạng thái lái xe:

  • Đã đỗ xe. Đồ dùng trong công viên.
  • Không hoạt động. Bánh răng không ở trong Công viên và tốc độ bằng 0.
  • Chuyển nhà. Bánh răng không ở trong công viên và tốc độ không bằng 0.

Để tìm hiểu cách các ứng dụng sử dụng trạng thái lái của ô tô và các hạn chế tương ứng về trải nghiệm người dùng, xem bài viết Sử dụng các quy định hạn chế về trải nghiệm người dùng và trạng thái lái xe ô tô.

Cấu hình hạn chế dựa trên trạng thái ổ đĩa

Để ngăn sự phân tâm của người lái xe, Android sẽ ánh xạ trạng thái lái xe theo một bộ Hạn chế về trải nghiệm người dùng /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Đã đỗ xe. Không hạn chế.
  • Không hoạt động. Không có video và không có màn hình cấu hình.
  • Chuyển nhà. Bị hạn chế hoàn toàn (bắt buộc phải có tất cả quy tắc hạn chế).

Ánh xạ minh hoạ ở trên được xác định trước và định cấu hình dưới dạng tài nguyên XML. Chiến lược phát hành đĩa đơn /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java sau đó lưu các quy tắc đó vào bộ nhớ. Sau đó, dịch vụ này liên kết trạng thái lái xe hiện tại đến các Hạn chế về trải nghiệm người dùng và truyền phát các hạn chế hiện tại cho toàn bộ hệ thống.

<!-- 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>

Cấu hình cho nhiều màn hình

Theo mặc định, không có hạn chế nào được áp dụng cho các màn hình bổ sung. Cách tạo quy định hạn chế các cấu hình cho nhiều màn hình, hãy bao gồm thẻ RestrictionMapping cùng với phần cổng vật lý cho màn hình đó. Các quy định hạn chế phù hợp sẽ tự động được áp dụng cho mỗi màn hình. Trong ví dụ sau, màn hình có Id cổng thực 1 và 2 có cấu hình:

<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>

Cấu hình cho các chế độ hạn chế

Bạn có thể chọn bất kỳ tên nào cho chế độ, chẳng hạn như thanh thiếu niên. Trong ví dụ sau đây: các hạn chế khác nhau được thiết lập cho chế độ mặc định và chế độ hành khách (trước đây, chỉ hỗ trợ chế độ hành khách):

<DrivingState car:state="idling">
    <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
    <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>
Bạn có thể sử dụng API để đặt bất kỳ tên chuỗi nào cho chế độ này. Ví dụ: Phương thức setRestrictionMode(@NonNull String mode) trong CarUxRestrictManager. (Trước đây, bạn sẽ sử dụng Phương thức setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) trong CarUxRestrictManager).

Các API CarUxRestrictConfiguration

Các hạn chế với CarUxRestrictConfiguration

Lớp mới CarUxRestrictionsConfiguration được liên kết 1:1 với XML hiện tại giản đồ cấu hình. Bạn có thể tạo CarUxRestrictionsConfiguration bằng CarUxRestrictions.Builder để xác thực cấu hình dựa trên bản dựng().

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 CarUxRestrictManager

Đặt CarUxRestrictionsConfiguration cho lần lái xe tiếp theo bằng CarUxRestrictionsManager. Phương pháp này yêu cầu quyền, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION.

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Duy trì cấu hình Hạn chế trải nghiệm người dùng mới

Khi một cấu hình mới được truyền vào, dịch vụ Hạn chế trải nghiệm người dùng sẽ trả về một giá trị boolean cho biết liệu cấu hình mới đã được lưu thành công hay chưa. Cấu hình mới này chỉ được dùng khi Đầu phát trung tâm tích hợp (IHU) khởi động lại và xe đậu. Trong nội bộ, Các hạn chế về trải nghiệm người dùng dịch vụ này chứa hai bộ cấu hình:

  • Phát hành công khai. Mặc dù không bắt buộc, nhưng cấu hình này thường xuất hiện. Trải nghiệm người dùng Dịch vụ hạn chế sẽ đọc cấu hình này khi khởi động.
  • Theo giai đoạn. Cũng không bắt buộc, cấu hình này không ảnh hưởng đến Các hạn chế về trải nghiệm người dùng và được thăng cấp lên Sản xuất khi dịch vụ ô tô bắt đầu và khi ô tô đỗ.

Cấu hình sản xuất

Hình 1. Cấu hình sản xuất

Lỗi địa chỉ

Cho đến khi nhận được thông tin về trạng thái lái xe từ CarPropertyManager (ví dụ: trong khi khởi động), Các quy định hạn chế về trải nghiệm người dùng sẽ không được thực thi. Hệ thống hoạt động như thể trạng thái lái xe Đã đỗ xe.

Nếu không đọc được cấu hình đã lưu (ví dụ: kết quả của SettingsNotFoundException), thì Dịch vụ Hạn chế trải nghiệm người dùng quay lại chế độ được mã hoá cứng, bị hạn chế hoàn toàn:

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

Các hạn chế đối với người dùng và trạng thái lái xe

Nội dung sau đây mô tả các hoạt động tương tác hiển thị trong sơ đồ thiết kế sau:

Thúc đẩy lượt tương tác theo trạng thái

Hình 2. Thúc đẩy lượt tương tác theo trạng thái

Các thuộc tính dùng để lấy trạng thái lái xe

Sử dụng 3 VehiclePropertyIds sau để lấy trạng thái lái xe:

API có sẵn cho ứng dụng

Mã này nằm ở các vị trí sau:

Vị trí

CarUxRestrictionsManager Các API công khai để đăng ký các thay đổi về Quy định hạn chế về trải nghiệm người dùng.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

CarUxRestrictions Định nghĩa các quy định hạn chế về trải nghiệm người dùng.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
Các API hệ thống để đăng ký các thay đổi về trạng thái lái xe.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Để mô phỏng trạng thái lái xe, hãy xem Kiểm thử.