Tối ưu hoá để chống phân tâm (DO) được cung cấp dưới dạng một công cụ giúp giảm mức độ tương tác của người lái xe với ứng dụng Cài đặt trong khi ô tô đang di chuyển. Bạn có thể cần thay đổi một số chế độ cài đặt trong khi lái xe để ứng dụng bị chặn hoàn toàn. Tuy nhiên, theo mặc định, hầu hết các lựa chọn ưu tiên đều bị tắt chỉ bằng khoá và dễ dàng cập nhật các lựa chọn ưu tiên.
Hình 1. Các ứng dụng được bật khi đang lái xe
Toàn bộ hoạt động cũng có thể bị chặn nếu không được tối ưu hoá để chống phân tâm, như minh hoạ dưới đây. Phương thức này hiện được dùng chủ yếu để tìm kiếm chế độ cài đặt.
Hình 2. Đã chặn mọi hoạt động
Bạn có thể tuỳ chỉnh cơ bản đối với hiệu suất của DO thông qua cấu hình lớp phủ. Nếu bạn yêu cầu tuỳ chỉnh chi tiết hơn, các thay đổi bổ sung có thể thực hiện thông qua mã.
Tuỳ chỉnh cấp cao
Khi một lựa chọn ưu tiên bị tắt trong khi đang lái xe, việc nhấn vào lựa chọn đó sẽ hiển thị một thông báo ngắn
thông báo cho biết tùy chọn không khả dụng trong khi lái xe, miễn là tùy chọn
có đính kèm bộ điều khiển lựa chọn ưu tiên. Thông báo sử dụng
Chuỗi restricted_while_driving
có thể tuỳ chỉnh bằng lớp phủ
(miễn là chuỗi nhỏ hơn giới hạn 60 ký tự).
Hình 3. Lớp phủ tuỳ chỉnh
Bạn có thể tắt toàn bộ khung DO bằng config_always_ignore_ux_restrictions
.
Khi đặt giá trị này thành true, người lái xe có thể tương tác với mọi khía cạnh của
Ứng dụng Cài đặt.
<bool name="config_always_ignore_ux_restrictions">true</bool>
Nếu cấu hình ở trên được đặt thành false, ứng dụng Cài đặt sẽ quay lại sử dụng
config_ignore_ux_restrictions
để xác định xem nên bật tuỳ chọn nào trong khi lái xe. Các chuỗi được cung cấp ở đây
phải trỏ đến các chuỗi được xác định trong preference_keys.xml.
Ví dụ
Ví dụ sau để biết cách bật chế độ cài đặt được lồng sâu trong khi lái xe
minh hoạ cách bật chế độ đầu ra cho tính năng Chuyển văn bản sang lời nói (TTS). Để làm được điều này,
thêm tất cả chế độ cài đặt trong hệ phân cấp vào config_ignore_ux_restrictions
.
Điều này bao gồm các lựa chọn ưu tiên về hệ thống, ngôn ngữ và phương thức nhập cũng như TTS cho cấu hình, vì hệ thống phân cấp của chúng ta là
Hệ thống->Ngôn ngữ & Đầu vào->Đầu ra của chuyển văn bản sang lời nói. Tuy nhiên, lựa chọn ưu tiên
trong mảnh chuyển văn bản sang lời nói vẫn bị tắt. Để cho phép các quảng cáo này, chúng tôi
chúng ta cần thêm khoá cho những lựa chọn ưu tiên mà chúng ta muốn truy cập được. Trong phần này
ví dụ: chúng tôi muốn bật tuỳ chọn phát lại nhưng không bật công cụ
để chúng ta thêm pk_tts_playback_group
vào cấu hình.
<string-array name="config_ignore_ux_restrictions"> [...] <item>@string/pk_system_settings_entry</item> <item>@string/pk_languages_and_input_settings</item> <item>@string/pk_tts_settings_entry</item> <item>@string/pk_tts_playback_group</item> </string-array>
Chế độ tuỳ chỉnh chi tiết
Có một số lựa chọn ưu tiên có thể yêu cầu hành vi tuỳ chỉnh nhiều hơn so với chỉ cần bật/tắt tuỳ chọn dựa trên trạng thái lái xe. Ví dụ: Bluetooth và Wi-Fi đã được sửa đổi để hiển thị các thiết bị Bluetooth đã lưu hoặc Điểm truy cập Wi-Fi trong khi lái xe.
Hiện tại, không có giải pháp dựa trên cấu hình để tạo những loại
điều chỉnh. Thay vào đó, bạn có thể tạo một lớp tuỳ chỉnh mở rộng
PreferenceController và ghi đè onApplyUxRestrictions()
để làm cho
thay đổi.
Khi trình điều khiển lựa chọn ưu tiên tuỳ chỉnh được tạo, bạn có thể phủ tệp XML có liên quan để thay thế trình điều khiển lựa chọn ưu tiên mặc định bằng cách triển khai của riêng bạn.
Ví dụ
Trong CarSettings, một số lựa chọn ưu tiên có hành vi được tuỳ chỉnh nhiều hơn, có thể là được dùng làm ví dụ để tuỳ chỉnh thêm. Ví dụ: trong danh sách điểm truy cập Wi-Fi, hành vi mong muốn là chỉ hiển thị các điểm truy cập đã lưu trong khi lái xe (và ẩn phần còn lại). Để đạt được điều này, hãy làm như sau:
} else if (shouldApplyUxRestrictions(getUxRestrictions())) { wifiEntries = getCarWifiManager().getSavedWifiEntries(); } else { wifiEntries = getCarWifiManager().getAllWifiEntries(); }
Vì các điểm truy cập xuất hiện tại đây đã bị hạn chế, bạn
không muốn áp dụng thêm UxRestrictions
cho các lựa chọn ưu tiên này.
Do đó, hãy ghi đè onApplyUxRestrictions
và thực hiện một thao tác có chủ đích
không hoạt động:
@Override protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) { // Since the list dynamically changes based on the UX restrictions, we // enable this fragment regardless of the restriction. Intentional no-op. }
Một ví dụ khác được cung cấp trên thiết bị có kết nối Bluetooth.
Để tiếp tục bật để kết nối và ngắt kết nối với thiết bị Bluetooth nhưng muốn
vô hiệu hoá khả năng truy cập vào các chế độ cài đặt bổ sung đối với các thiết bị này. Để đạt được điều này, chúng tôi
ghi đè onApplyUxRestrictions
một lần nữa nhưng lần này, nếu NO_SETUP
quy tắc hạn chế đang có hiệu lực, hãy ẩn thao tác phụ trên lựa chọn ưu tiên.
@Override protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) { super.onApplyUxRestrictions(uxRestrictions); if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) { updateActionVisibility(getPreference(), /* isActionVisible= */ false); } }