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```