設定是 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_protocol
和 AccessibilityMarker
為
透過 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