开发者如果需要应用程序运行的设备的环境参数,以此来作出不同的场景判断,比如多语言,暗黑模式等,需要用到Environment设备环境查询。
Environment是ArkUI框架在应用程序启动时创建的单例对象。它为AppStorage提供了一系列描述应用程序运行状态的属性。Environment的所有属性都是不可变的(即应用不可写入),所有的属性都是简单类型。
使用场景
从UI中访问Environment参数
● 使用Environment.envProp将设备运行的环境变量存入AppStorage中:
1 2 | // 将设备的语言code存入AppStorage,默认值为en Environment.envProp( 'languageCode' , 'en' ); |
● 可以使用@StorageProp链接到Component中。
1 | @StorageProp( 'languageCode' ) lang : string = 'en' ; |
设备环境到Component的更新链:Environment --> AppStorage -->Component。
说明:
@StorageProp关联的环境参数可以在本地更改,但不能同步回AppStorage中,因为应用对环境变量参数是不可写的,只能在Environment中查询。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // 将设备languageCode存入AppStorage中 Environment.envProp( 'languageCode' , 'en' ); let enable: undefined = AppStorage. get <undefined>( 'languageCode' ); @Entry @Component struct Index { @StorageProp( 'languageCode' ) languageCode: string = 'en' ; build() { Row() { Column() { // 输出当前设备的languageCode Text( this .languageCode) } } } } |
应用逻辑使用Environment
1 2 3 4 5 6 7 8 9 10 | // 使用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明确的地方调用,将导致无法查询到设备环境数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // EntryAbility.ts import 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' ); }) }) } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析