• OpenHarmony 设备环境查询:Environment


    开发者如果需要应用程序运行的设备的环境参数,以此来作出不同的场景判断,比如多语言,暗黑模式等,需要用到 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() {        // 输出当前设备的languageCode        Text(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');      })    })  }}
    
  • 相关阅读:
    软著申请流程
    TDengine 3.0 存储引擎升级之路
    【编程实践】黑框框里的打字小游戏,但是汇编语言
    php实现扫码二维码访问指定ID页面登录后自动跳转到该页面的方法
    【力扣题解】1413. 逐步求和得到正数的最小值【每日一题】
    coudn‘t deserialize object in variable ‘entity‘.获取流程变量无法反序列化问题
    Namespace 无法删除一直处于 Terminating 状态
    手撕Vuex-模块化共享数据下
    Neuron+eKuiper 实现工业物联网数据采集、清理与反控
    MCE | 曲贝替定——来自海洋的抗软组织肿瘤化合物
  • 原文地址:https://blog.csdn.net/OpenHarmony_dev/article/details/134058744