HarmonyOS | 状态管理(九) | Environment (设备环境查询)

news/2024/7/21 10:40:48 标签: harmonyos, 设备环境查询, Environment

系列文章目录

1.HarmonyOS | 状态管理(一) | @State装饰器
2.HarmonyOS | 状态管理(二) | @Prop装饰器
3.HarmonyOS | 状态管理(三) | @Link装饰器
4.HarmonyOS | 状态管理(四) | @Provide和@Consume装饰器
5.HarmonyOS | 状态管理(五) | @Observed装饰器和@ObjectLink装饰器
6.HarmonyOS | 状态管理(六) | LocalStorage(页面级UI状态存储)
7.HarmonyOS | 状态管理(七) | AppStorage(应用级UI状态存储)
8.HarmonyOS | 状态管理(八) | PersistentStorage(持久化存储UI状态)


个人博客主页 : 谭祖爱 & 技术博客

项目实例地址 : RecordHarmonyOSProject


文章目录


前言

上一篇我们讲到了 持久化存储UI状态 (PersistentStorage),这篇文章我们讲解 设备环境查询 (Environment)


Environment_28">一、Environment是什么?

开发者如果需要应用程序运行的设备的环境参数,以此来作出不同的场景判断,比如多语言,暗黑模式等,需要用到Environment设备环境查询
Environment是ArkUI框架在应用程序启动时创建的单例对象。它为AppStorage提供了一系列描述应用程序运行状态的属性。Environment的所有属性都是不可变的(即应用不可写入),所有的属性都是简单类型。

Environment_33">二、Environment使用场景

Environment_34">1.从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_71">2.应用逻辑使用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_85">3.从UI中访问Environment参数(应用主题颜色)

// 将设备的色彩模型code存入AppStorage,默认值为ColorMode.LIGHT
Environment.EnvProp('colorMode',ColorMode.LIGHT)

@Entry
@Component
struct EnvironmentPage {
  @StorageProp('colorMode') colorMode:number = ColorMode.LIGHT

  build() {
    Row() {
      Column() {
        // 输出当前设备的colorMode
        if(this.colorMode.toString() === "0"){
          Text('浅色')
        }else {
          Text('深色')
        }
      }
    }
  }
}

三、总结

  1. 通过 Environment.EnvProp 写入环境参数
  2. 通过 @StorageProp 链接到 Component 中
  3. 通过 SubscribedAbstractProperty<类型> = AppStorage.Prop(‘参数’) 声明 常量 ,通过 常量.get() 获取相应 环境变量值

http://www.niftyadmin.cn/n/5406949.html

相关文章

实际中的Stream流的用法

实际中的Stream流的用法 不同对象怎么生成stream流对象 package stream;/*** @author 刘诗良* @version 1.0* @Description*/ import java.util.*; import java.util.stream.Stream;public class StreamDemo {public static void main(String[] args) {//Collection体系的集合…

【探索AI】二十一 深度学习之第4周:循环神经网络(RNN)与长短时记忆(LSTM)

循环神经网络&#xff08;RNN&#xff09;与长短时记忆&#xff08;LSTM&#xff09; RNN的基本原理与结构LSTM的原理与实现序列建模与文本生成任务实践&#xff1a;使用RNN或LSTM进行文本分类或生成任务步骤 1: 数据准备步骤 2: 构建模型步骤 3: 定义损失函数和优化器步骤 4: …

CMU 10-414/714: Deep Learning Systems --hw0

hw0 宏观上的步骤: softmax loss: 实现softmax loss代码 概念 softmax就是将结果映射到0~1之间,且所有结果相加为1(概率形式)cross-entropy loss就是计算 p ( x ) log ⁡ q ( x ) p(x)\log {q(x)} p(x)logq(x),此值可用于衡量实际输出与期望输出的距离,进而衡量预测模…

electron+vue3全家桶+vite项目搭建【29】封装窗口工具类【3】控制窗口定向移动

文章目录 引入实现效果思路声明通用的定位对象主进程模块渲染进程测试效果 引入 demo项目地址 窗口工具类系列文章&#xff1a; 封装窗口工具类【1】雏形 封装窗口工具类【2】窗口组&#xff0c;维护窗口关系 封装窗口工具类【3】控制窗口定向移动 很多时候&#xff0c;我们想…

GIN与Echo:选择正确Go框架的指南

您是否在Go中构建Web应用&#xff1f;选择正确的框架至关重要&#xff01;GIN和Echo是两个热门选择&#xff0c;每个都有其优势和特点。本指南将详细介绍每个框架的特性、速度、社区热度以及它们各自擅长的项目类型。最后&#xff0c;您将能够为您的下一个Web项目选择完美的框架…

小语言模型(SLM)介绍

大型语言模型&#xff08;LLM&#xff09;&#xff0c;如GPT、Claude等的出现&#xff0c;证明了它们是人工智能领域的一项变革性步伐&#xff0c;彻底革新了机器学习模型的强大性质&#xff0c;并在改变AI生态系统中发挥了重要作用&#xff0c;促使生态系统中的每个成员都必须…

在docker中玩flink时候记录一些组合命令

前言 玩docker的时候记录一些组合命令&#xff0c;一方面是可以直接拿上来使用&#xff0c;还有的话也可以拿过来改改&#xff0c;主要是我自己有这种经历&#xff0c;过一阵子我自己也忘&#xff0c;与其去搜人家的博客还不如自己记录一把。好了&#xff0c;没啥所谓的规律性…

基于机器学习的曲面拟合方法

随着科技的不断发展&#xff0c;机器学习成为了最近最热门的技术之一&#xff0c;也被广泛应用于各个领域。其中&#xff0c;基于机器学习的曲面拟合方法也备受研究者们的关注。曲面拟合是三维模型处理中的重要技术&#xff0c;其目的是用一组数据点拟合出平滑的曲面&#xff0…