设置是 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 构建系统的更多信息,请参阅 Fuchsia 构建 system。
权限
访问“设置”的任何应用都必须通过其组件声明使用情况 清单。例如,以下清单声明了对 fuchsia.settings.accessibility 协议:
{
program: {
runner: "elf",
binary: "bin/example",
},
use: [
{ protocol: "fuchsia.settings.Accessibility" },
],
}
如需详细了解 Fuchsia 组件,请参阅 组件清单。
正在连接
应用通过 Fuchsia 中的运行时绑定访问“设置” SDK。本指南将使用 Rust 作为示例,但绑定适用于 各种其他语言,例如 C++ 和 Dart。
与其他 FIDL 协议一样,访问“设置”的第一步是 连接到“设置服务”。以下示例连接到 fuchsia.settings.accessibility:
let proxy = connect_to_protocol::<AccessibilityMarker>().context("failed to connect to Settings");
在上面的示例中,connect_to_protocol
和 AccessibilityMarker
为
提供的数据
客户端应通过单一连接与每个“设置”协议进行通信。 持续通信必须通过同一连接进行, 确保响应的一致性和连续性,如后文所述。
阅读
每个“设置协议”都会定义一个表格,用于传达相关的
例如状态和状态将数据整理到单一结构下
可让“设置”简洁地传达信息。这种结构还有助于
如稍后所述。在“无障碍功能”中
例如,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;
};
每个协议中都有一个名为 Watch 的方法, 信息。声明 fuchsia.settings.accessibility:
Watch() -> (struct {
settings AccessibilitySettings;
});
Watch
遵循挂起的 get 模式,返回当前的
首次调用时发送的信息。对后续调用的响应为
被延迟,直到最后一个返回值更新为止。使用相同的
代理连接对于这种行为至关重要,因为“设置”
根据渠道跟踪传回的响应。如果发生错误
设置将关闭包含相关摘要的 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