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中:

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

    ts 复制代码
    @StorageProp('languageCode') lang : string = 'en';

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

说明:

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

ts 复制代码
// 将设备languageCode存入AppStorage中
Environment.envProp('languageCode', 'en');

@Entry
@Component
struct Index {
  @StorageProp('languageCode') languageCode: string = 'en';

  build() {
    Row() {
      Column() {
        // 输出当前设备的languageCode
        Text(this.languageCode)
      }
    }
  }
}

应用逻辑使用Environment

ts 复制代码
// 使用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明确的地方调用,将导致无法查询到设备环境数据。

ts 复制代码
// 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.鸿蒙南向开发方向

相关推荐
翻斗花园牛图图-8 分钟前
MySQL——表的操作
数据库·mysql
August_._9 分钟前
【MySQL】触发器、日志、锁机制 深度解析
java·大数据·数据库·人工智能·后端·mysql·青少年编程
拾忆,想起19 分钟前
超时重传 vs 快速重传:TCP双保险如何拯救网络丢包?
java·开发语言·网络·数据库·网络协议·tcp/ip·php
Android疑难杂症23 分钟前
鸿蒙Media Kit媒体服务开发快速指南
android·harmonyos·音视频开发
python15632 分钟前
谷歌推出Nano Banana,全新图像编辑模型
数据库
Java 码农36 分钟前
MySQL索引添加与删除方法详解
数据库·mysql
正在走向自律41 分钟前
电科金仓KingbaseES数据库全面语法解析与应用实践
数据库·国产数据库·kingbasees·数据定义语言ddl·数据操作语言dml·kingbasees语法
web安全工具库1 小时前
Linux进程的:深入理解子进程回收与僵尸进程
java·linux·数据库
国霄1 小时前
(3)Kotlin/Js For Harmony——解决官方库序列化卡顿
harmonyos
麦聪聊数据1 小时前
大数据与云原生数据库中的 SQL2API:优化跨平台数据访问与查询
数据库·sql·云原生