車輛設定中的分心因素最佳化功能

分心因素最佳化 (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);
    }
}