การเพิ่มประสิทธิภาพการเบี่ยงเบนความสนใจ (DO) เป็นเครื่องมือในการลดการโต้ตอบของผู้ขับขี่กับแอพการตั้งค่าในขณะที่รถกำลังเคลื่อนที่ อาจจำเป็นต้องเปลี่ยนการตั้งค่าบางอย่างในขณะขับรถ ดังนั้นแอปจึงไม่ถูกบล็อกโดยสมบูรณ์ อย่างไรก็ตาม ตามค่าเริ่มต้น การตั้งค่าส่วนใหญ่จะถูกปิดใช้งานโดยเปิดใช้งานเฉพาะการตั้งค่าที่สำคัญและอัปเดตได้อย่างง่ายดาย
รูปที่ 1 แอปที่เปิดใช้งานในขณะขับรถ
กิจกรรมทั้งหมดสามารถถูกบล็อกได้หากไม่ได้เพิ่มประสิทธิภาพการรบกวนสมาธิ ดังที่แสดงด้านล่าง ปัจจุบันวิธีนี้ใช้สำหรับการค้นหาการตั้งค่าเป็นหลัก
รูปที่ 2 กิจกรรมทั้งหมดถูกบล็อก
การปรับแต่งพื้นฐานสำหรับประสิทธิภาพของ DO สามารถทำได้ผ่านการซ้อนทับการกำหนดค่า หากคุณต้องการการปรับแต่งแบบละเอียดมากขึ้น การเปลี่ยนแปลงเพิ่มเติมสามารถทำได้ผ่านโค้ด
การปรับแต่งระดับสูง
เมื่อการตั้งค่าถูกปิดใช้งานในขณะขับรถ การแตะที่การตั้งค่านั้นจะแสดงข้อความแจ้งว่าการตั้งค่านั้นไม่พร้อมใช้งานในขณะขับรถ โดยที่การตั้งค่านั้นมีตัวควบคุมการตั้งค่าติดอยู่ ข้อความใช้สตริง restricted_while_driving
ซึ่งสามารถปรับแต่งด้วยการซ้อนทับได้ (หากสตริงมีความยาวน้อยกว่าขีดจำกัด 60 อักขระ)
รูปที่ 3 การซ้อนทับแบบกำหนดเอง
กรอบงาน DO ทั้งหมดสามารถปิดการใช้งานได้โดยใช้ config_always_ignore_ux_restrictions
การตั้งค่านี้เป็นจริงหมายความว่าคนขับสามารถโต้ตอบกับทุกแง่มุมของแอพการตั้งค่าได้
<bool name="config_always_ignore_ux_restrictions">true</bool>
หากการกำหนดค่าข้างต้นถูกตั้งค่าเป็นเท็จ แอปการตั้งค่าจะย้อนกลับไปที่ config_ignore_ux_restrictions
เพื่อพิจารณาว่าควรเปิดใช้งานการตั้งค่าใดขณะขับรถ สตริงที่จัดเตรียมไว้ที่นี่ควรชี้ไปที่สตริงที่กำหนดไว้ใน preference_keys.xml.
ตัวอย่าง
เพื่อแสดงวิธีเปิดใช้งานการตั้งค่าที่ซ้อนกันอย่างลึกซึ้งในขณะขับรถ ตัวอย่างนี้จะสาธิตวิธีเปิดใช้งานการตั้งค่าเอาต์พุตข้อความเป็นคำพูด (TTS) เพื่อให้ได้ผล ให้เพิ่มการตั้งค่าทั้งหมดในลำดับชั้นไปที่ config_ignore_ux_restrictions
ซึ่งรวมถึงระบบ ภาษาและการป้อนข้อมูล และการตั้งค่า TTS ในการกำหนดค่า เนื่องจากลำดับชั้นของเราคือ ระบบ -> ภาษาและการป้อนข้อมูล -> เอาต์พุตข้อความเป็นคำพูด อย่างไรก็ตาม การตั้งค่าภายในส่วนของข้อความเป็นคำพูดยังคงปิดใช้งานอยู่ เพื่อเปิดใช้งาน เราจำเป็นต้องเพิ่มคีย์สำหรับการตั้งค่าที่เราต้องการให้สามารถเข้าถึงได้ ในตัวอย่างนี้ เราต้องการเปิดใช้งานการตั้งค่าการเล่น แต่ไม่ใช่การตั้งค่ากลไก ดังนั้นเราจึงเพิ่ม pk_tts_playback_group
ให้กับการกำหนดค่าของเรา
<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>
การปรับแต่งโดยละเอียด
มีการตั้งค่าบางอย่างที่อาจต้องมีพฤติกรรมที่ได้รับการปรับแต่งมากกว่าการเปิด/ปิดใช้งานการตั้งค่าตามสถานะการขับขี่ ตัวอย่างเช่น บลูทูธและ Wi-Fi ได้รับการแก้ไขแล้วเพื่อแสดงอุปกรณ์บลูทูธที่บันทึกไว้หรือจุดเข้าใช้งาน Wi-Fi ขณะขับรถ
ขณะนี้ยังไม่มีโซลูชันที่ใช้การกำหนดค่าเพื่อทำการปรับเปลี่ยนประเภทนี้ คุณสามารถสร้างคลาสแบบกำหนดเองที่ขยาย PreferenceController และแทนที่ onApplyUxRestrictions()
เพื่อทำการเปลี่ยนแปลงที่ต้องการได้
เมื่อมีการสร้างตัวควบคุมการกำหนดค่าตามความชอบแบบกำหนดเอง คุณสามารถซ้อนทับไฟล์ XML ที่เกี่ยวข้องเพื่อแทนที่ตัวควบคุมการกำหนดค่าตามความชอบดีฟอลต์ด้วยการใช้งานของคุณเอง
ตัวอย่าง
ใน CarSettings การตั้งค่าบางอย่างจะมีพฤติกรรมที่ได้รับการปรับแต่งมากกว่านี้ ซึ่งสามารถใช้เป็นตัวอย่างในการปรับแต่งเพิ่มเติมได้ ตัวอย่างเช่น ใน รายการจุดเข้าใช้งาน Wi-Fi ลักษณะการทำงานที่ต้องการคือแสดงเฉพาะจุดเข้าใช้งานที่บันทึกไว้ในขณะขับรถ (และซ่อนส่วนที่เหลือ) เพื่อให้บรรลุเป้าหมายนี้ ให้ทำดังต่อไปนี้:
mAccessPoints = CarUxRestrictionsHelper.isNoSetup(getUxRestrictions()) ? getCarWifiManager().getSavedAccessPoints() : getCarWifiManager().getAllAccessPoints();
เนื่องจากจุดเข้าใช้งานที่ปรากฏที่นี่ถูกจำกัดอยู่แล้ว คุณจึงไม่ต้องการใช้ UxRestrictions
เพิ่มเติมกับการตั้งค่าเหล่านี้ ดังนั้น ให้แทนที่ onApplyUxRestrictions
และดำเนินการ no-op โดยเจตนา:
@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. }
อีกตัวอย่างหนึ่งมีให้ใน อุปกรณ์ที่เชื่อมต่อด้วย Bluetooth เพื่อเปิดใช้งานอุปกรณ์ Bluetooth ต่อไปเพื่อเชื่อมต่อและยกเลิกการเชื่อมต่อ แต่ต้องการปิดการใช้งานความสามารถในการเข้าถึงการตั้งค่าเพิ่มเติมสำหรับอุปกรณ์เหล่านี้ เพื่อให้บรรลุเป้าหมายนี้ เราจะแทนที่ onApplyUxRestrictions
อีกครั้ง แต่คราวนี้ หากข้อจำกัด NO_SETUP
ทำงานอยู่ ให้ซ่อนการดำเนินการรองในการตั้งค่า
@Override protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) { super.onApplyUxRestrictions(uxRestrictions); if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) { updateActionVisibility(getPreference(), /* isActionVisible= */ false); } }