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