使用設定

設定是 Fuchsia SDK 的一部分,適用於採用 合適的支援套件這些產品的應用程式 以及獲得適當權限的設定。互動結束後 存取及修改設定中的設定常用模式 通訊協定

本指南會逐步說明如何將「設定」 並與「設定」互動

必要條件

「設定服務」支援 Fuchsia 中的「設定」通訊協定。服務的 //src/settings/service:setui_service 套件及其其中一個核心資料分割 例如 //src/settings/service:setui_service_core_shard 都必須出現在 才能使用「設定」。下列產品定義 包含「設定」:

import("//products/bringup.gni")

base_package_labels += [
  "//src/settings/service:setui_service",
]
core_realm_shards += [
  "//src/settings/service:setui_service_core_shard",
]

如要進一步瞭解 Fuchsia 的建構系統,請參閱 The Fuchsia 版本 系統

權限

凡是會存取「設定」的應用程式,都必須透過元件宣告用途 資訊清單。舉例來說,下列資訊清單會在 fuchsia.settings.accessibility 通訊協定:

{
    program: {
        runner: "elf",
        binary: "bin/example",
    },
    use: [
        { protocol: "fuchsia.settings.Accessibility" },
    ],
}

如需關於 Fuchsia 元件的詳細資訊,請參閱 元件資訊清單

連線中

應用程式可透過 Fuchsia 中的執行階段繫結存取「設定」 將機器學習工作流程自動化本指南將使用 Rust 做為範例,但繫結適用於 例如 C++ 和 Dart 等其他語言

和其他 FIDL 通訊協定一樣,存取「設定」的第一步是 連線至設定服務。以下範例連線至 fuchsia.settings.accessibility:

let proxy = connect_to_protocol::<AccessibilityMarker>().context("failed to connect to Settings");

在上述範例中,connect_to_protocolAccessibilityMarker 為 透過 SDK 取得

用戶端應透過單一連線與每個設定通訊協定通訊。 必須使用相同的連線進行持續通訊,才能確保 回應的一致性和連續性,將在後續章節中說明。

閱讀

每個設定通訊協定都會定義一個表格,用來傳達相關訊息 例如狀態和狀態透過單一結構管理資料 能讓「設定」準確傳達資訊。這種結構也能 溝通異動 (如稍後所述)。無障礙功能 例如,AccessibilitySettings 會擷取相關詳細資料:

/// Supported accessibility settings.
type AccessibilitySettings = table {
    /// For videos, use an alternative audio track (akin to changing languages)
    /// that explains what is happening visually while there is no dialogue.
    1: audio_description bool;

    /// Read aloud elements of the screen selected by the user.
    2: screen_reader bool;

    /// Invert colors on the screen.
    3: color_inversion bool;

    /// Interpret triple-tap on the touchscreen as a command to zoom in.
    4: enable_magnification bool;

    /// What type of color-blindness, if any, to correct for.
    5: color_correction ColorBlindnessType;

    /// What kind of sources get closed captions, and how they look.
    6: captions_settings CaptionsSettings;
};

每個通訊協定皆提供名為「智慧手錶」的方法,以便提供這項功能 可能不準確或不適當這是 fuchsia.settings.accessibility:

Watch() -> (struct {
    settings AccessibilitySettings;
});

Watch 遵循懸掛取得模式,傳回目前的 相關資訊對後續叫用的回應 會延後到有最新傳回值的更新為止。使用相同的 這些要求中的 Proxy 連線對這項行為至關重要,如同「設定」 根據管道追蹤已傳送的回覆。如果發生錯誤 設定頁面會關閉含有相關憑證的 FIDL 管道。

在無障礙功能範例中,呼叫 Watch 判斷螢幕閱讀器是否 已啟用:

let settings = proxy.watch().expect("settings retrieved");
let screen_reader_enabled = settings.screen_reader.ok_or(false);

寫作

應用程式可能會利用系統找到的相同表格結構,藉此影響「設定」 用於讀取資料每個可變動的通訊協定都會為 Watch 提供對應的方法 稱為 Set,後者採用 AccessibilitySettings 做為引數:

Set(struct {
    settings AccessibilitySettings;
}) -> () error Error;

如要傳達變更,請在表格欄位中指定所需的最終狀態。 由於每個欄位皆為選填,因此您只需要指定受影響的欄位。 將變更定義為差異後,就會有多個呼叫端的競爭狀況 會避開。如果成功,變更就會保留下來,並套用至所有開機程序。 延續上例,呼叫端可以透過 下列程式碼:

let new_settings = AccessibilitySettings::default();
new_settings.screen_reader = Some(true);
proxy.set(new_settings).await.expect("request completed").expect("request succeeded");

偵錯

「設定」提供 Fuchsia CLI 工具 (ffx setui) 可用於互動 及其通訊協定這項工具可讓開發人員即時存取設定、 讓使用者瞭解應用程式會受到哪些設定的影響及受到「設定」的影響。 ffx setui 工具隨附 Fuchsia 原始碼和 SDK。如要使用,請執行 執行下列指令:

ffx config set setui true

擷取設定通訊協定目前的資訊 (無障礙功能和 VolumePolicy),您可以用通訊協定的名稱來呼叫 ffx setui。 舉例來說,下列指令會擷取隱私權相關資訊:

ffx setui privacy

針對無障礙功能,請在通訊協定名稱後方加上關鍵字 watch

ffx setui accessibility watch

針對 VolumePolicy,請在通訊協定名稱後方加上關鍵字 get

ffx setui volume_policy get

ffx setui也可以修改設定。公用程式的 help 指令會詳細說明 每個通訊協定的特定修改語法:

ffx setui privacy help

以下範例說明如何設定使用者資料共用同意聲明 (user-data-sharing-consent) 變更為 true:

ffx setui privacy -u true