• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Environment:设备环境查询
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @zzq212050299-->
5<!--Designer: @s10021109-->
6<!--Tester: @TerryTsao-->
7<!--Adviser: @zhang_yixin13-->
8
9如果开发者需要获取应用程序运行设备的环境参数(如多语言、深浅色模式等)以进行不同的场景判断,可以使用Environment设备环境查询。
10
11Environment是ArkUI框架在应用程序启动时创建的单例对象,为AppStorage提供应用程序运行状态的属性。所有属性都是不可变的简单类型。
12
13Environment提供了读取系统环境变量并将其值写入AppStorage的功能。开发者需要通过AppStorage获取环境变量的值。详细信息请参阅 [Environment 内置参数](#environment内置参数)。
14
15在阅读本文档前,建议提前阅读:[AppStorage](./arkts-appstorage.md)。
16
17## Environment内置参数
18
19| 键 | 数据类型 | 描述                                      |
20| ------------------ | ------------------ | ------------------ |
21| accessibilityEnabled              | string                  | 是否启用获取无障碍屏幕读取。'true'表示启用,'false'表示不启用。|
22| colorMode              | ColorMode                  | 色彩模型类型。<br>- ColorMode.LIGHT:浅色。<br>- ColorMode.DARK:深色。                 |
23| fontScale              | number                  | 字体大小比例。开发者需要配置configuration,设置fontSizeScale为"followSystem",具体配置步骤可参考[configuration](../../quick-start/app-configuration-file.md#configuration标签)使fontScale跟随系统变化。<br>默认值跟随系统默认参数。                |
24| fontWeightScale              | number                  | 字体粗细程度。在不同的系统或者机型中,fontWeightScale的取值范围可能会有所不同。<br>默认值跟随系统默认参数。                |
25| layoutDirection              | LayoutDirection                  | 布局方向类型:<br>- LayoutDirection.LTR:从左到右。<br>- LayoutDirection.RTL:从右到左。                 |
26| languageCode              | string                  | 当前系统语言值,取值必须为小写字母(例如:zh)。<br>默认值跟随系统默认参数。                 |
27
28## 使用场景
29
30### 从UI中访问Environment参数
31
32- 使用Environment.[envProp](../../reference/apis-arkui/arkui-ts/ts-state-management.md#envprop10)将设备运行的环境变量存入AppStorage中。
33
34  ```ts
35  // 将设备的语言code存入AppStorage,默认值为en
36  Environment.envProp('languageCode', 'en');
37  ```
38
39- 可以使用\@StorageProp链接到Component中。
40
41  ```ts
42  @StorageProp('languageCode') lang: string = 'en';
43  ```
44
45设备环境到Component的更新链:Environment --&gt; AppStorage --&gt; Component。
46
47> **说明:**
48>
49> \@StorageProp关联的环境参数可以在本地更改,但不能同步回AppStorage中,因为应用对环境变量参数是不可写的,只能在Environment中查询。
50
51```ts
52// 将设备languageCode存入AppStorage中
53Environment.envProp('languageCode', 'en');
54
55@Entry
56@Component
57struct Index {
58  @StorageProp('languageCode') languageCode: string = 'en';
59
60  build() {
61    Row() {
62      Column() {
63        // 输出当前设备的languageCode
64        Text(this.languageCode)
65      }
66    }
67  }
68}
69```
70
71### 应用逻辑使用Environment
72
73```ts
74// 使用Environment.envProp将设备运行languageCode存入AppStorage中;
75Environment.envProp('languageCode', 'en');
76// 从AppStorage获取单向绑定的languageCode的变量
77const lang: SubscribedAbstractProperty<string> = AppStorage.prop('languageCode');
78
79if (lang.get() === 'zh') {
80  console.info('你好');
81} else {
82  console.info('Hello!');
83}
84```
85
86## 限制条件
87
88Environment和UIContext相关联,需要在[UIContext](../../reference/apis-arkui/arkts-apis-uicontext-uicontext.md)明确的时候才可以调用。可以通过在[runScopedTask](../../reference/apis-arkui/arkts-apis-uicontext-uicontext.md#runscopedtask)里明确上下文。如果没有在UIContext明确的地方调用,将导致无法查询到设备环境数据。
89
90```ts
91// EntryAbility.ets
92import { UIAbility } from '@kit.AbilityKit';
93import { window } from '@kit.ArkUI';
94
95export default class EntryAbility extends UIAbility {
96  onWindowStageCreate(windowStage: window.WindowStage) {
97    windowStage.loadContent('pages/Index');
98    let window = windowStage.getMainWindow();
99    window.then(window => {
100      let uiContext = window.getUIContext();
101      uiContext.runScopedTask(() => {
102        Environment.envProp('languageCode', 'en');
103      });
104    });
105  }
106}
107```