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

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

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

Environment内置参数

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

使用场景

从UI中访问Environment参数

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

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

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

设备环境到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)
      }
    }
  }
}

应用逻辑使用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.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');
      })
    })
  }
}

为了能让大家更好的学习鸿蒙(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.鸿蒙南向开发方向

相关推荐

  1. Spring神器:Environment环境配置

    2024-04-04 17:56:01       22 阅读
  2. adb shell pm 查询设备应用

    2024-04-04 17:56:01       24 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-04 17:56:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-04 17:56:01       20 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-04 17:56:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-04 17:56:01       20 阅读

热门阅读

  1. 【机器学习理论】2023 Spring Homework 2 Solution

    2024-04-04 17:56:01       12 阅读
  2. 编程生活day7--明明的随机数、6翻了、吃火锅

    2024-04-04 17:56:01       15 阅读
  3. C#多页面共用一个实例

    2024-04-04 17:56:01       15 阅读
  4. 【LeetCode】第2题:两数相加(AHK v2)

    2024-04-04 17:56:01       13 阅读
  5. EFCore通用仓储类

    2024-04-04 17:56:01       13 阅读
  6. AspectJ 的 5 大通知类型

    2024-04-04 17:56:01       11 阅读
  7. 详细介绍如何利用 A star(A*)算法解决8数码问题

    2024-04-04 17:56:01       15 阅读
  8. python实现UDP服务器

    2024-04-04 17:56:01       18 阅读
  9. Redis的基础命令集详解

    2024-04-04 17:56:01       20 阅读
  10. Redis Stack十部曲之二:理解Redis Stack中的数据类型

    2024-04-04 17:56:01       17 阅读