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