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 lại Nguyên tắc mất tập trung khi lái xe .

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

Dịch vụ Hạn chế UX trên ô tô cho phép nhà phát triển xác định cấu hình Hạn chế UX trên ô tô mới. 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ủ các tiêu chuẩn an toàn địa phương), 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 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 sẽ được tải khi dịch vụ Hạn chế UX khởi động lại xe đang ở chế độ Đỗ. Dịch vụ xe đảm bảo xe đang ở trạng thái đỗ 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ế UX mới, các API được cung cấp để xây dựng cấu hình. Trạng thái chọn số và tốc độ được chuyển đổi thành một trong ba trạng thái lái xe:

  • Đã đậu. Thiết bị trong công viên.
  • Chạy không tải. Bánh răng không ở số Park và tốc độ bằng không.
  • Di chuyển. Bánh răng không ở số Park và tốc độ không bằng 0.

Để tìm hiểu cách ứng dụng sử dụng trạng thái lái xe của ô tô và các hạn chế UX tương ứng, hãy xem Sử dụng trạng thái lái xe ô tô và Hạn chế UX .

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

Để ngăn chặn sự mất tập trung của người lái xe, Android ánh xạ trạng thái lái xe tới một bộ Hạn chế UX /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Đã đậu. Không hạn chế.
  • Chạy không tải. Không có video và không có màn hình cấu hình.
  • Di chuyển. Bị hạn chế hoàn toàn (tất cả các hạn chế đều được yêu cầu).

Ánh xạ minh họa ở trên được xác định trước và định cấu hình dưới dạng tài nguyên XML. Các /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ụ sẽ ánh xạ trạng thái lái xe hiện tại tới Hạn chế UX và truyền phát các hạn chế hiện tại tới 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. Để tạo cấu hình hạn chế cho nhiều màn hình, hãy bao gồm thẻ RestrictionMapping với Cổng vật lý cho màn hình đó. Các hạn chế thích 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 vật lý 1 và 2 có cấu hình khác nhau:

<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ư teen . Trong ví dụ sau, các hạn chế khác nhau được định cấu hình 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ế độ. Ví dụ: phương thức setRestrictionMode(@NonNull String mode) trong CarUxRestrictionsManager. (Trước đây, bạn sẽ sử dụng phương thức setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) trong CarUxRestrictionsManager).

API cấu hình CarUxRestrictions

Hạn chế với CarUxRestrictionsConfiguration

Lớp CarUxRestrictionsConfiguration mới được ánh xạ 1:1 tới lược đồ cấu hình XML hiện tại. CarUxRestrictionsConfiguration có thể được xây dựng bằng CarUxRestrictions. Builder , xác thực cấu hình khi 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

Đặt CarUxRestrictionsConfiguration cho lần lái xe tiếp theo bằng CarUxRestrictionsManager . Phương pháp này cần có sự cho phép, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION .

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Duy trì cấu hình Hạn chế UX mới

Khi một cấu hình mới được chuyển vào, dịch vụ Hạn chế UX sẽ trả về một boolean để cho biết 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 sử dụng khi Bộ phận Đầu Tích hợp (IHU) khởi động lại và xe đang đỗ. Trong nội bộ, dịch vụ Hạn chế UX chứa hai bộ cấu hình:

  • Sản xuất. Mặc dù là tùy chọn nhưng cấu hình này thường có sẵn. Dịch vụ Hạn chế UX đọc cấu hình này khi khởi động.
  • Đã được dàn dựng. Cũng là tùy chọn, cấu hình này không ảnh hưởng đến Hạn chế UX và được thăng cấp lên Sản xuất khi dịch vụ ô tô khởi động và khi ô tô đang đỗ.

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

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

Địa chỉ lỗi

Cho đến khi nhận được thông tin trạng thái lái xe từ CarPropertyManager (ví dụ: trong khi khởi động), Hạn chế UX sẽ không được thực thi. Hệ thống hoạt động như thể trạng thái lái xe là Đỗ xe.

Nếu việc đọc cấu hình đã lưu không thành công (ví dụ: kết quả SettingNotFoundException), dịch vụ Hạn chế UX sẽ quay trở lại chế độ được mã hóa cứng, hạn chế hoàn toàn:

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

Trạng thái lái xe và hạn chế của người dùng

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

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

Hình 2. Tương tác trạng thái điều khiển

Các thuộc tính được sử dụng để lấy trạng thái lái xe

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

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

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

Mã số Vị trí
CarUxRestrictionsManager
API công khai để đăng ký các thay đổi Hạn chế UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions
Định nghĩa hạn chế UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
API hệ thống để đăng ký thay đổi trạng thái lái xe.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

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