开发者如果需要应用程序运行的设备的环境参数,以此来作出不同的场景判断,比如多语言,暗黑模式等,需要用到 Environment 设备环境查询。
Environment 是 ArkUI 框架在应用程序启动时创建的单例对象。它为 AppStorage 提供了一系列描述应用程序运行状态的属性。Environment 的所有属性都是不可变的(即应用不可写入),所有的属性都是简单类型。
使用场景
从 UI 中访问 Environment 参数
● 使用 Environment.envProp 将设备运行的环境变量存入 AppStorage 中:
// 将设备的语言code存入AppStorage,默认值为enEnvironment.envProp('languageCode', 'en');
● 可以使用 @StorageProp 链接到 Component 中。
@StorageProp('languageCode') lang : string = 'en';
设备环境到 Component 的更新链:Environment --> AppStorage -->Component。
说明:
@StorageProp 关联的环境参数可以在本地更改,但不能同步回 AppStorage 中,因为应用对环境变量参数是不可写的,只能在 Environment 中查询。
// 将设备languageCode存入AppStorage中Environment.envProp('languageCode', 'en');let enable: undefined = AppStorage.get<undefined>('languageCode');@Entry@Componentstruct Index {@StorageProp('languageCode') languageCode: string = 'en';build() {Row() {Column() {// 输出当前设备的languageCodeText(this.languageCode)}}}}
应用逻辑使用 Environment
// 使用Environment.EnvProp将设备运行languageCode存入AppStorage中;Environment.envProp('languageCode', 'en');// 从AppStorage获取单向绑定的languageCode的变量const lang: SubscribedAbstractProperty<string> = AppStorage.prop('languageCode');if (lang.get() === 'zh') {console.info('你好');} else {console.info('Hello!');}
限制条件
Environment 和 UIContext 相关联,需要在UIContext明确的时候才可以调用。可以通过在runScopedTask里明确上下文。如果没有在 UIContext 明确的地方调用,将导致无法查询到设备环境数据。
// EntryAbility.tsimport UIAbility from '@ohos.app.ability.UIAbility';import window from '@ohos.window';export default class EntryAbility extends UIAbility {onWindowStageCreate(windowStage: window.WindowStage) {windowStage.loadContent('pages/Index');let window = windowStage.getMainWindow()window.then(window => {let uicontext = window.getUIContext()uicontext.runScopedTask(() => {Environment.envProp('languageCode', 'en');})})}}
本文介绍了如何在ArkUI框架中通过Environment获取并存储设备环境参数,如语言和暗黑模式,以及如何在组件中使用@StorageProp进行数据绑定。同时,强调了Environment的不可变性和与UIContext的关系。
2054

被折叠的 条评论
为什么被折叠?



