• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Environment:设备环境查询
2
3
4开发者如果需要应用程序运行的设备的环境参数,以此来作出不同的场景判断,比如多语言,暗黑模式等,需要用到Environment设备环境查询。
5
6
7Environment是ArkUI框架在应用程序启动时创建的单例对象。它为AppStorage提供了一系列描述应用程序运行状态的属性。Environment的所有属性都是不可变的(即应用不可写入),所有的属性都是简单类型。
8
9
10## 使用场景
11
12
13### 从UI中访问Environment参数
14
15- 使用Environment.envProp将设备运行的环境变量存入AppStorage中:
16
17  ```ts
18  // 将设备的语言code存入AppStorage,默认值为en
19  Environment.envProp('languageCode', 'en');
20  ```
21
22- 可以使用\@StorageProp链接到Component中。
23
24  ```ts
25  @StorageProp('languageCode') lang : string = 'en';
26  ```
27
28设备环境到Component的更新链:Environment --> AppStorage -->Component。
29
30> **说明:**
31>
32> \@StorageProp关联的环境参数可以在本地更改,但不能同步回AppStorage中,因为应用对环境变量参数是不可写的,只能在Environment中查询。
33
34
35```ts
36// 将设备languageCode存入AppStorage中
37Environment.envProp('languageCode', 'en');
38let enable: undefined = AppStorage.get<undefined>('languageCode');
39
40@Entry
41@Component
42struct Index {
43  @StorageProp('languageCode') languageCode: string = 'en';
44
45  build() {
46    Row() {
47      Column() {
48        // 输出当前设备的languageCode
49        Text(this.languageCode)
50      }
51    }
52  }
53}
54```
55
56
57### 应用逻辑使用Environment
58
59
60```ts
61// 使用Environment.EnvProp将设备运行languageCode存入AppStorage中;
62Environment.envProp('languageCode', 'en');
63// 从AppStorage获取单向绑定的languageCode的变量
64const lang: SubscribedAbstractProperty<string> = AppStorage.prop('languageCode');
65
66if (lang.get() === 'zh') {
67  console.info('你好');
68} else {
69  console.info('Hello!');
70}
71```
72
73
74## 限制条件
75
76
77Environment和UIContext相关联,需要在[UIContext](../reference/apis/js-apis-arkui-UIContext.md#uicontext)明确的时候才可以调用。可以通过在[runScopedTask](../reference/apis/js-apis-arkui-UIContext.md#runscopedtask)里明确上下文。如果没有在UIContext明确的地方调用,将导致无法查询到设备环境数据。
78
79
80```ts
81// EntryAbility.ts
82import UIAbility from '@ohos.app.ability.UIAbility';
83import window from '@ohos.window';
84
85export default class EntryAbility extends UIAbility {
86  onWindowStageCreate(windowStage: window.WindowStage) {
87    windowStage.loadContent('pages/Index');
88    let window = windowStage.getMainWindow()
89    window.then(window => {
90      let uicontext = window.getUIContext()
91      uicontext.runScopedTask(() => {
92        Environment.envProp('languageCode', 'en');
93      })
94    })
95  }
96}
97```