分心因素最佳化 (DO) 提供的工具,可減少駕駛人與「設定」應用程式的互動,並 車輛正在移動。部分設定必須在開車時變更,因此應用程式不會 完全封鎖然而根據預設,大部分的偏好設定只有金鑰和 您可以啟用輕鬆更新偏好設定
圖 1. 已在開車期間啟用的應用程式
如果整個活動沒有產生幹擾元素,系統可能也會封鎖這些活動。 如下所示。這個方法目前主要用於搜尋設定。
圖 2. 已封鎖所有活動
可透過設定完成 DO 效能的基本自訂 疊加層如果您需要進行更精細的自訂,其他變更可以 都是透過程式碼做出的
進階自訂功能
開車時停用偏好設定,輕觸通知就會顯示浮動式訊息
根據偏好設定,開車時無法使用偏好設定
已附加偏好設定控制器訊息會使用
restricted_while_driving
字串,可透過疊加層自訂
(前提是字串少於 60 個半形字元)。
圖 3. 自訂重疊元素
您可以使用 config_always_ignore_ux_restrictions
停用整個 DO 架構。
將此值設為 true,表示駕駛人可以與
「設定」應用程式。
<bool name="config_always_ignore_ux_restrictions">true</bool>
如果上述設定設為 False,「設定」應用程式會改回使用
config_ignore_ux_restrictions
,判斷開車時應啟用哪些偏好設定。這裡提供的字串
應指向 preference_keys.xml.
中定義的字串
範例
以下範例說明如何在行車時啟用深層巢狀設定
示範如何啟用文字轉語音 (TTS) 輸出設定。為了達到這個目的
將階層中的所有設定新增至 config_ignore_ux_restrictions
。
包括系統、語言和輸入內容,以及設定的 TTS 偏好設定,因為我們的階層
系統 > 語言與「輸入」->「文字轉語音輸出」不過,偏好設定
文字轉語音片段中的文字
仍會停用為了啟用 API
我們要針對我們要存取的偏好設定新增鍵在本
例如,我們要啟用播放偏好設定,但不啟用引擎
請在設定中加入 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 存取點清單中, 只在開車時顯示已儲存的存取點 (並隱藏其餘)。 為達成此目標,請按照下列步驟操作:
} else if (shouldApplyUxRestrictions(getUxRestrictions())) { wifiEntries = getCarWifiManager().getSavedWifiEntries(); } else { wifiEntries = getCarWifiManager().getAllWifiEntries(); }
由於此處顯示的存取點已受到限制,因此
例如將額外的 UxRestrictions
套用至這些偏好設定。
因此,請覆寫 onApplyUxRestrictions
並刻意執行
免人工管理:
@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. }
如需其他範例,請參閱藍牙綁定裝置。
繼續啟用藍牙裝置的連線和中斷連線功能,但我想
停用這些裝置的其他設定存取權限。為此,我們
再次覆寫 onApplyUxRestrictions
,但這次如果 NO_SETUP
限制已啟用,但隱藏偏好設定中的次要動作。
@Override protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) { super.onApplyUxRestrictions(uxRestrictions); if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) { updateActionVisibility(getPreference(), /* isActionVisible= */ false); } }