如何订阅系统环境变量的变化

如何订阅系统环境变量的变化

HarmonyOS
2024-07-05 18:24:18
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
躺平嗑产品懒猫
1

使用ApplicationContext订阅回调

使用ApplicationContext.on(type: 'environment', callback: EnvironmentCallback)方法,应用程序可以通过在非应用组件模块中订阅系统环境变量的变化来动态响应这些变化。例如,使用该方法在页面中监测系统语言的变化。

示例代码

import common from '@ohos.app.ability.common';
import EnvironmentCallback from '@ohos.app.ability.EnvironmentCallback';
import { BusinessError } from '@ohos.base';
import hilog from '@ohos.hilog';
import { Configuration } from '@ohos.app.ability.Configuration';
const TAG: string = '[CollaborateAbility]';
const DOMAIN_NUMBER: number = 0xFF00;
@Entry
@Component
struct Index {
  private context = getContext(this) as common.UIAbilityContext;

注册订阅系统环境变化的ID

subscribeConfigurationUpdate(): void {

获取系统当前语言

获取ApplicationContext

let applicationContext = this.context.getApplicationContext();

通过applicationContext订阅环境变量变化

let environmentCallback: EnvironmentCallback = {
      onConfigurationUpdated(newConfig: Configuration) {
        hilog.info(DOMAIN_NUMBER, TAG, `onConfigurationUpdated systemLanguage is ${systemLanguage}, newConfig: ${JSON.stringify(newConfig)}`);
        if (this.systemLanguage !== newConfig.language) {
          hilog.info(DOMAIN_NUMBER, TAG, `systemLanguage from ${systemLanguage} changed to ${newConfig.language}`);

将变化之后的系统语言保存,作为下一次变化前的系统语言

}
      },
      onMemoryLevel(level) {
        hilog.info(DOMAIN_NUMBER, TAG, `onMemoryLevel level: ${level}`);
      }
    }
    try {
      this.callbackId = applicationContext.on('environment', environmentCallback);
    } catch (err) {
      let code = (err as BusinessError).code;
      let message = (err as BusinessError).message;
      hilog.error(DOMAIN_NUMBER, TAG, `Failed to register applicationContext. Code is ${code}, message is ${message}`);
    };
  }

页面展示

build() {
    //...
  }
}
分享
微博
QQ
微信
回复1
2024-07-06 11:13:35
相关问题
etcdctl v3 环境变量
2233浏览 • 1回复 待解决
如何将Node.js配置到环境变量中去?
533浏览 • 2回复 待解决
如何取消订阅输入法文本内容变化
449浏览 • 1回复 待解决