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