訂閱系統環境變量的變化
系統環境變量是指:在應用程序運行期間,終端設備的系統設置(例如系統的語言環境、屏幕方向等)發生變化。
開發者通過訂閱系統環境變化,可以使應用程序及時感知這種變化,并作出相應處理,從而提供更好的用戶體驗。例如,用戶更改系統語言設置時,應用程序可以自動根據新的語言設置更新用戶界面的語言;當用戶將設備旋轉到橫屏或者豎屏時,應用程序可以重新布局用戶界面,以適應屏幕方向和尺寸。
系統配置的變化通常由“設置”中的選項或“控制中心”中的圖標觸發。訂閱系統環境變量變化,可以使應用程序更加智能地響應系統環境變化,從而提供更好的用戶體驗。查看當前支持訂閱變化的系統環境變量,請參見[Configuration]。
基于當前的應用模型,可以通過以下幾種方式來實現訂閱系統環境變量的變化。
- [使用ApplicationContext訂閱回調]
- [在AbilityStage組件容器中訂閱回調]
- [在UIAbility組件中訂閱回調]
- [在ExtensionAbility組件中訂閱回調]
- 發前請熟悉鴻蒙開發指導文檔 :[
gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
使用ApplicationContext訂閱回調
[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; private callbackId: number = 0; // 注冊訂閱系統環境變化的ID subscribeConfigurationUpdate(): void { let systemLanguage: string | undefined = this.context.config.language; // 獲取系統當前語言 // 1.獲取ApplicationContext let applicationContext = this.context.getApplicationContext(); // 2.通過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}`); systemLanguage = 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() { //... } }
- 在資源使用完成之后,可以通過調用
ApplicationContext.off(type: 'environment', callbackId: number)
方法釋放相關資源。import common from '@ohos.app.ability.common'; import { BusinessError } from '@ohos.base'; import hilog from '@ohos.hilog'; const TAG: string = '[CollaborateAbility]'; const DOMAIN_NUMBER: number = 0xFF00; @Entry @Component struct Index { private context = getContext(this) as common.UIAbilityContext; private callbackId: number = 0; // 注冊訂閱系統環境變化的ID unsubscribeConfigurationUpdate() { let applicationContext = this.context.getApplicationContext(); try { applicationContext.off('environment', this.callbackId); } catch (err) { let code = (err as BusinessError).code; let message = (err as BusinessError).message; hilog.error(DOMAIN_NUMBER, TAG, `Failed to unregister applicationContext. Code is ${code}, message is ${message}`); }; } // 頁面展示 build() { //... } }
在AbilityStage組件容器中訂閱回調
使用[AbilityStage.onConfigurationUpdate()]回調方法訂閱系統環境變量的變化。當系統環境變量發生變化時,會調用該回調方法。在該方法中,通過[Configuration]對象獲取最新的系統環境配置信息。可以進行相應的界面適配等操作,從而提高系統的靈活性和可維護性。
說明:
- DevEco Studio默認工程中未自動生成AbilityStage,AbilityStage文件的創建請參見[AbilityStage組件容器]。
- 當使用回調方法訂閱系統環境變量的變化時,該回調方法會隨著[AbilityStage]的生命周期而存在,在Module銷毀時一并銷毀。
例如,在[AbilityStage.onConfigurationUpdate()]回調方法中實現監測系統語言的變化。
import AbilityStage from '@ohos.app.ability.AbilityStage';
import hilog from '@ohos.hilog';
import type { Configuration } from '@ohos.app.ability.Configuration';
const TAG: string = '[MyAbilityStage]';
const DOMAIN_NUMBER: number = 0xFF00;
let systemLanguage: string | undefined; // 系統當前語言
export default class MyAbilityStage extends AbilityStage {
onCreate(): void {
systemLanguage = this.context.config.language; // Module首次加載時,獲取系統當前語言
hilog.info(DOMAIN_NUMBER, TAG, `systemLanguage is ${systemLanguage}`);
//...
}
onConfigurationUpdate(newConfig: Configuration): void {
hilog.info(DOMAIN_NUMBER, TAG, `onConfigurationUpdate, language: ${newConfig.language}`);
hilog.info(DOMAIN_NUMBER, TAG, `onConfigurationUpdated systemLanguage is ${systemLanguage}, newConfig: ${JSON.stringify(newConfig)}`);
if (systemLanguage !== newConfig.language) {
hilog.info(DOMAIN_NUMBER, TAG, `systemLanguage from ${systemLanguage} changed to ${newConfig.language}`);
systemLanguage = newConfig.language; // 將變化之后的系統語言保存,作為下一次變化前的系統語言
}
}
}
在UIAbility組件中訂閱回調
UIAbility組件提供了UIAbility.onConfigurationUpdate()
回調方法用于訂閱系統環境變量的變化。當系統環境變量發生變化時,會調用該回調方法。在該方法中,通過[Configuration]對象獲取最新的系統環境配置信息,而無需重啟UIAbility。
說明:
當使用回調方法訂閱系統環境變量的變化時,該回調方法會隨著UIAbility的生命周期而存在,在UIAbility銷毀時一并銷毀。
例如,在onConfigurationUpdate()
回調方法中實現監測系統語言的變化。
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import hilog from '@ohos.hilog';
import UIAbility from '@ohos.app.ability.UIAbility';
import Want from '@ohos.app.ability.Want';
import { Configuration } from '@ohos.app.ability.Configuration';
const TAG: string = '[EntryAbility]';
const DOMAIN_NUMBER: number = 0xFF00;
let systemLanguage: string | undefined; // 系統當前語言
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
systemLanguage = this.context.config.language; // UIAbility實例首次加載時,獲取系統當前語言
hilog.info(DOMAIN_NUMBER, TAG, `systemLanguage is ${systemLanguage}`);
}
onConfigurationUpdate(newConfig: Configuration): void {
hilog.info(DOMAIN_NUMBER, TAG, `onConfigurationUpdated systemLanguage is ${systemLanguage}, newConfig: ${JSON.stringify(newConfig)}`);
if (systemLanguage !== newConfig.language) {
hilog.info(DOMAIN_NUMBER, TAG, `systemLanguage from ${systemLanguage} changed to ${newConfig.language}`);
systemLanguage = newConfig.language; // 將變化之后的系統語言保存,作為下一次變化前的系統語言
}
}
// ...
}
在ExtensionAbility組件中訂閱回調
ExtensionAbility組件提供了onConfigurationUpdate()
回調方法用于訂閱系統環境變量的變化。當系統環境變量發生變化時,會調用該回調方法。在該方法中,通過[Configuration]對象獲取最新的系統環境配置信息。
說明:
HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿
當使用回調方法訂閱系統環境變量的變化時,該回調方法會隨著ExtensionAbility的生命周期而存在,在ExtensionAbility銷毀時一并銷毀。
以FormExtensionAbility為例說明。例如,在onConfigurationUpdate()
回調方法中實現系統環境變量的變化。
import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
import { Configuration } from '@ohos.app.ability.Configuration';
import hilog from '@ohos.hilog';
const TAG: string = '[EntryAbility]';
const DOMAIN_NUMBER: number = 0xFF00;
export default class EntryFormAbility extends FormExtensionAbility {
onConfigurationUpdate(config: Configuration) {
hilog.info(DOMAIN_NUMBER, TAG, '[EntryFormAbility] onConfigurationUpdate:' + JSON.stringify(config));
}
// ...
}
審核編輯 黃宇
-
變量
+關注
關注
0文章
613瀏覽量
28360 -
組件
+關注
關注
1文章
512瀏覽量
17813 -
鴻蒙
+關注
關注
57文章
2339瀏覽量
42805
發布評論請先 登錄
相關推薦
評論