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


文章目录

  • 系列文章目录
  • 前言
  • 一、Environment是什么?
  • 二、Environment使用场景
    • 1.从UI中访问Environment参数
    • 2.应用逻辑使用Environment
    • 3.从UI中访问Environment参数(应用主题颜色)
  • 三、总结


前言

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


一、Environment是什么?

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

二、Environment使用场景

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() {// 输出当前设备的languageCodeText(this.languageCode)}}}
}

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!');
}

3.从UI中访问Environment参数(应用主题颜色)

// 将设备的色彩模型code存入AppStorage,默认值为ColorMode.LIGHT
Environment.EnvProp('colorMode',ColorMode.LIGHT)@Entry
@Component
struct EnvironmentPage {@StorageProp('colorMode') colorMode:number = ColorMode.LIGHTbuild() {Row() {Column() {// 输出当前设备的colorModeif(this.colorMode.toString() === "0"){Text('浅色')}else {Text('深色')}}}}
}

三、总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为啥要用C艹不用C?

在很多时候&#xff0c;有人会有这样的疑问 ——为什么要用C&#xff1f;C相对于C优势是什么&#xff1f; 最近两年一直在做Linux应用&#xff0c;能明显的感受到C带来到帮助以及快感 之前&#xff0c;我在文章里面提到环形队列 C语言&#xff0c;环形队列 环形队列到底是怎么回…

NLP_文本数据分析_3(代码示例)

目标 了解文本数据分析的作用.掌握常用的几种文本数据分析方法. 1 文件数据分析介绍 文本数据分析的作用: 文本数据分析能够有效帮助我们理解数据语料, 快速检查出语料可能存在的问题, 并指导之后模型训练过程中一些超参数的选择. 常用的几种文本数据分析方法: 标签数量分布句…

阿里云的ssh的22端口,修改为2422端口,作为默认的ssh端口

要将阿里云&#xff08;或任何Linux服务器&#xff09;的SSH端口从默认的22端口更改为2422端口&#xff0c;你可以按照以下步骤操作&#xff1a; 编辑SSH配置文件&#xff1a; 打开SSH服务的配置文件/etc/ssh/sshd_config。你可以使用nano、vi或任何文本编辑器来编辑这个文件。…

Vue3_2024_4天【computer、watch、method在Vue2~3中的说明】未完待补

第一&#xff1a;从概念上介绍~~vue中计算属性、方法、监听器&#xff08;以Vue2描述&#xff09; 1.计算属性 (Computed Properties): 1.概念&#xff1a; 计算属性是基于响应式依赖进行缓存的属性&#xff0c;只有在相关依赖发生改变时才会重新求值。它们类似于具有缓存的函…

场景问题: VisualVM工具Profiler JDBC不是真实执行的SQL

1. 问题 诡异的问题表象&#xff1a; 前端反馈分页接口的Total字段一直为0 使用Visualvm中的 Profiler 注入到应用后&#xff0c;查看JDBC监控得到了分页接口执行的SQL&#xff0c;复制出来执行是55. 此时还没有注意到 IN 的范围中有一个特别的值 NULL &#x1f928; 2. 排查…

视觉Transformers中的位置嵌入 - 研究与应用指南

视觉 Transformer 中位置嵌入背后的数学和代码简介。 自从 2017 年推出《Attention is All You Need》以来&#xff0c;Transformer 已成为自然语言处理 (NLP) 领域最先进的技术。 2021 年&#xff0c;An Image is Worth 16x16 Words 成功地将 Transformer 应用于计算机视觉任务…

Windows C++:控制新进程的创建方式

目录 介绍 标志位介绍 代码示例 这些宏定义&#xff08;dwCreationFlag值&#xff09;是用于Windows操作系统中CreateProcess函数的标志&#xff0c;它们控制新进程的创建方式。下面是这些标志的中文介绍&#xff1a; 介绍 Winbase.h中的部分代码&#xff1a; // // Proc…

idea中引入新JDK环境

在不同的项目中往往会需要不同的运行环境&#xff0c;那么如何下载一个新的环境并运用到idea中呢&#xff1f; 下面给出的就是oracle官网&#xff0c;以JDK17为例教大家如何下载 Java Archive Downloads - GraalVM for JDK 17https://www.oracle.com/java/technologies/javase…

Python数据可视化库之bashplotlib使用详解

概要 在数据可视化领域,Python拥有许多优秀的库,如Matplotlib、Seaborn等,它们可以创建漂亮而复杂的图形。但是,有时候我们可能需要在终端中绘制简单的图形,这时候Bashplotlib就派上了用场。Bashplotlib是一个Python库,可以在终端中绘制基本的图形,如条形图、散点图等。…

YOLOV9训练集制作+Train+Val记录

一、YOLO数据集格式分布 在YOLO中&#xff0c;数据集的分布如图&#xff0c;在dataset文件夹下有imags&#xff08;图片&#xff09;和labels&#xff08;标签&#xff09;。在images和labels文件夹下又分别存放三个文件夹&#xff0c;分别对应测试集、训练集、验证集&#xff…

记一次异步转同步的经历

工作中会经常遇到一些对数据进行加工的场景&#xff0c;这些数据来自很多地方&#xff0c;一般通过HTTP、RPC等方式去调用&#xff0c;数据源返回的报文也一般都是JSON、XML等格式。其中大部分数据源是同步返回&#xff0c;但有些数据源是异步返回的(也就是说数据源的数据是数据…

Android 音乐播放器(暂停、下一首、上一首)

1.编写主页面&#xff0c;使用listview组件放置音乐列表信息 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/r…

使用postman测试若依其他业务接口API—3

请求方式 如上&#xff0c;使用Get请求来获取练习题库中的所有习题数据。 请求地址 在请求路径栏输入请求地址&#xff0c;以下图为例&#xff1a; 参数体与鉴权 在Parms键入所需参数&#xff0c;其中key为键,value为键的值&#xff1a;如下图所示&#xff1a; 认证成功与失…

持续集成(CICD)- gogs仓库的部署和使用

文章目录 一、gogs的介绍二、部署gog仓库三、首次启动gogs四、登录五、创建一个非空仓库六、从仓库拉取代码到本地七、把本地编辑的代码上传到仓库 一、gogs的介绍 Gogs作为一个轻量级、易于部署和使用的自托管Git服务&#xff0c;为小型团队和个人开发者提供了一个简单而强大…

【AIGC】如何提高Prompt准确度

前言 随着人工智能的迅猛进展&#xff0c;AIGC&#xff08;通用人工智能聊天工具&#xff09;已成为多个行业中不可或缺的自然语言处理技术。Prompt作为AIGC系统的一项关键功能&#xff0c;在工具的有效运作中发挥了举足轻重的作用。本篇文章将深入探讨Prompt与AIGC之间的紧密…

python笔记_程序流程控制2

C&#xff0c;循环控制 1&#xff0c;for循环 功能&#xff1a;让代码循环运行 语法&#xff1a; for <变量> in <范围、序列>&#xff1a; <循环操作语句> 例 nums &#xff08;1,2,3,4&#xff09; <class list> for i in nums&#xff1a; print&…

Java中文件的相关知识及文件IO操作

在我们日常生活中&#xff0c;会把许多东西都称之为文件。比如&#xff0c;一份纸质报告&#xff0c;或u盘中的一些文档&#xff0c;都会把它们称为文件。那么&#xff0c;这里说的文件是以操作系统的角度出发的。在操作系统中&#xff0c;会把许多硬件设备和软件资源都抽象成“…

ubuntu20.04安装nvidia驱动真实有效(被折磨了一天一夜的肝文!!!)

ubuntu20.04安装nvidia驱动真实有效 安装前后需要注意的安装nvidia驱动的教程 安装前后需要注意的 能找到这篇帖子说明你之前肯定有过无数次方法的尝试&#xff0c;这些尝试可能会影响下面教程的有效 1.下面这个指令可能会导致ubuntu内核的更新。内核更新可能会导致你的nvidia…

机器学习:主成分分析笔记

主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;是一种无监督的机器学习算法&#xff0c;通常用于高维数据的降维、提取主要特征、数据降噪和可视化。PCA的基本思想是将原始数据的多个变量转换为少数几个相互独立的变量&#xff08;即主成分&a…

shadertoy 游戏《来自星尘》摇杆复刻

正确的做法应该是上 noise 而不是叠加 sin 波&#xff0c;不过如果不想麻烦的话叠波还是一个不错的选择&#xff1a;整体效果如下&#xff0c;已经非常形似 直接上链接&#xff1a;Shader - Shadertoy BETA float radiusScale 0.9; float variation(vec2 v1, vec2 v2, float …