智能客服
你问我答,随时在线为你解决问题
HAR/HSP中需要监听系统环境变量变化,如何实现?
提供以下两种解决方案:
import { AbilityConstant, common, Configuration, EnvironmentCallback } from '@kit.AbilityKit'; export class EnvironmentMonitor { private context: common.UIAbilityContext | null = null; private callbackId: number | null = null; constructor(context: common.UIAbilityContext) { this.context = context; } onEnvironmentMonitor() { if (!this.context) { return; } let environmentCallback: EnvironmentCallback = { onConfigurationUpdated(config: Configuration) { console.info(`应用当前语言:${config.language}`); console.info(`应用深浅色模式[-1:未设置颜色; 0:深色; 1:浅色]:${config.colorMode}`); console.info(`指针设备是否已连接(鼠标、触控板等):${config.hasPointerDevice}`); console.info(`应用字体的唯一ID:${config.fontId}`); console.info(`字体大小缩放比例:${config.fontSizeScale}`); console.info(`字体粗细缩放比例:${config.fontWeightScale}`); console.info(`移动设备国家代码:${config.mcc}`); console.info(`区域设置:${config.locale}`); }, onMemoryLevel(level) { console.info(`监听内存变化: ${JSON.stringify(level)}`); switch (level) { case AbilityConstant.MemoryLevel.MEMORY_LEVEL_MODERATE: console.info('MEMORY_LEVEL_MODERATE'); break; case AbilityConstant.MemoryLevel.MEMORY_LEVEL_LOW: console.info('MEMORY_LEVEL_LOW'); break; case AbilityConstant.MemoryLevel.MEMORY_LEVEL_CRITICAL: console.info('MEMORY_LEVEL_CRITICAL'); break; default: console.info(`default`); } } }; this.callbackId = this.context.getApplicationContext().on('environment', environmentCallback); } offEnvironmentMonitor() { if (!this.callbackId || !this.context) { return; } this.context.getApplicationContext().off('environment', this.callbackId); } }
export { EnvironmentMonitor } from './src/main/ets/monitor/EnvironmentMonitor';
import { UIAbility } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { window } from '@kit.ArkUI'; import { EnvironmentMonitor } from 'hara'; const DOMAIN = 0x0000; export default class EntryAbility extends UIAbility { private monitor: EnvironmentMonitor | null = null; onCreate(): void { this.monitor = new EnvironmentMonitor(this.context); this.monitor.onEnvironmentMonitor(); } onDestroy(): void { this.monitor?.offEnvironmentMonitor(); } onWindowStageCreate(windowStage: window.WindowStage): void { hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); windowStage.loadContent('pages/Index', (err) => { if (err.code) { hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err)); return; } hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.'); }); } }
import { AbilityConstant, Configuration, UIAbility } from '@kit.AbilityKit'; export class CustomUIAbility extends UIAbility { onMemoryLevel(level: AbilityConstant.MemoryLevel): void { switch (level) { case AbilityConstant.MemoryLevel.MEMORY_LEVEL_MODERATE: console.info('MEMORY_LEVEL_MODERATE'); break; case AbilityConstant.MemoryLevel.MEMORY_LEVEL_LOW: console.info('MEMORY_LEVEL_LOW'); break; case AbilityConstant.MemoryLevel.MEMORY_LEVEL_CRITICAL: console.info('MEMORY_LEVEL_CRITICAL'); break; default: console.info(`default`); } } onConfigurationUpdate(newConfig: Configuration): void { console.info(`应用当前语言:${newConfig.language}`); console.info(`应用深浅色模式[-1:未设置颜色; 0:深色; 1:浅色]:${newConfig.colorMode}`); console.info(`屏幕方向[-1:未设置方向; 0:垂直; 1:水平]:${newConfig.direction}`); console.info(`屏幕显示密度:${newConfig.screenDensity}`); console.info(`应用所在的物理屏幕ID:${newConfig.displayId}`); console.info(`指针设备是否已连接(鼠标、触控板等):${newConfig.hasPointerDevice}`); console.info(`应用字体的唯一ID:${newConfig.fontId}`); console.info(`字体大小缩放比例:${newConfig.fontSizeScale}`); console.info(`字体粗细缩放比例:${newConfig.fontWeightScale}`); console.info(`移动设备国家代码:${newConfig.mcc}`); console.info(`区域设置:${newConfig.locale}`); } }
export { CustomUIAbility } from './src/main/ets/ability/CustomUIAbility';
import { hilog } from '@kit.PerformanceAnalysisKit'; import { window } from '@kit.ArkUI'; import { CustomUIAbility } from 'hara'; const DOMAIN = 0x0000; export default class EntryAbility extends CustomUIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { windowStage.loadContent('pages/Index', (err) => { if (err.code) { hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err)); return; } hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.'); }); } }