• HarmonyOS NEXT应用开发之Environment:设备环境查询


    开发者如果需要应用程序运行的设备的环境参数,以此来作出不同的场景判断,比如多语言,暗黑模式等,需要用到Environment设备环境查询。

    Environment是ArkUI框架在应用程序启动时创建的单例对象。它为AppStorage提供了一系列描述应用程序运行状态的属性。Environment的所有属性都是不可变的(即应用不可写入),所有的属性都是简单类型。

    Environment内置参数

    数据类型描述
    accessibilityEnabledboolean获取无障碍屏幕读取是否启用。
    colorModeColorMode色彩模型类型:选项为ColorMode.LIGHT: 浅色,ColorMode.DARK: 深色。
    fontScalenumber字体大小比例,范围: [0.85, 1.45]。
    fontWeightScalenumber字体粗细程度,范围: [0.6, 1.6]。
    layoutDirectionLayoutDirection布局方向类型:包括LayoutDirection.LTR: 从左到右,LayoutDirection.RTL: 从右到左。
    languageCodestring当前系统语言值,取值必须为小写字母, 例如zh。

    使用场景

    从UI中访问Environment参数

    • 使用Environment.envProp将设备运行的环境变量存入AppStorage中:

      // 将设备的语言code存入AppStorage,默认值为en
      Environment.envProp('languageCode', 'en');
      
      • 1
      • 2
    • 可以使用@StorageProp链接到Component中。

      @StorageProp('languageCode') lang : string = 'en';
      
      • 1

    设备环境到Component的更新链:Environment --> AppStorage -->Component。

    说明:

    @StorageProp关联的环境参数可以在本地更改,但不能同步回AppStorage中,因为应用对环境变量参数是不可写的,只能在Environment中查询。

    // 将设备languageCode存入AppStorage中
    Environment.envProp('languageCode', 'en');
    
    @Entry
    @Component
    struct Index {
      @StorageProp('languageCode') languageCode: string = 'en';
    
      build() {
        Row() {
          Column() {
            // 输出当前设备的languageCode
            Text(this.languageCode)
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    应用逻辑使用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!');
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    限制条件

    Environment和UIContext相关联,需要在 UIContext 明确的时候才可以调用。可以通过在 runScopedTask 里明确上下文。如果没有在UIContext明确的地方调用,将导致无法查询到设备环境数据。

    // EntryAbility.ets
    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');
          })
        })
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

    《鸿蒙开发学习手册》:

    如何快速入门:https://qr21.cn/FV7h05

    1. 基本概念
    2. 构建第一个ArkTS应用
    3. ……

    开发基础知识:https://qr21.cn/FV7h05

    1. 应用基础知识
    2. 配置文件
    3. 应用数据管理
    4. 应用安全管理
    5. 应用隐私保护
    6. 三方应用调用管控机制
    7. 资源分类与访问
    8. 学习ArkTS语言
    9. ……

    基于ArkTS 开发:https://qr21.cn/FV7h05

    1. Ability开发
    2. UI开发
    3. 公共事件与通知
    4. 窗口管理
    5. 媒体
    6. 安全
    7. 网络与链接
    8. 电话服务
    9. 数据管理
    10. 后台任务(Background Task)管理
    11. 设备管理
    12. 设备使用信息统计
    13. DFX
    14. 国际化开发
    15. 折叠屏系列
    16. ……

    鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

    鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

    1.项目开发必备面试题
    2.性能优化方向
    3.架构方向
    4.鸿蒙开发系统底层方向
    5.鸿蒙音视频开发方向
    6.鸿蒙车载开发方向
    7.鸿蒙南向开发方向

  • 相关阅读:
    STM32移植LVGL8.2
    无向图双连通分量(DCC)
    淮安美食整理
    【例0243】ask item array index 查询项目数组索引
    【无标题】
    vue3.0+ant design vue3.2.6框架的基本使用
    分布式事务(三)———TCC 解决方案
    【C++】-C++11中的知识点(上)--右值引用,列表初始化,声明
    springcloud下的nacos集群与gateway网关
    openssl官网文档资料
  • 原文地址:https://blog.csdn.net/weixin_61845324/article/details/137349412