色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙開發:訂閱系統環境變量的變化

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-11 21:56 ? 次閱讀

訂閱系統環境變量的變化

系統環境變量是指:在應用程序運行期間,終端設備的系統設置(例如系統的語言環境、屏幕方向等)發生變化。

開發者通過訂閱系統環境變化,可以使應用程序及時感知這種變化,并作出相應處理,從而提供更好的用戶體驗。例如,用戶更改系統語言設置時,應用程序可以自動根據新的語言設置更新用戶界面的語言;當用戶將設備旋轉到橫屏或者豎屏時,應用程序可以重新布局用戶界面,以適應屏幕方向和尺寸。

系統配置的變化通常由“設置”中的選項或“控制中心”中的圖標觸發。訂閱系統環境變量變化,可以使應用程序更加智能地響應系統環境變化,從而提供更好的用戶體驗。查看當前支持訂閱變化的系統環境變量,請參見[Configuration]。

基于當前的應用模型,可以通過以下幾種方式來實現訂閱系統環境變量的變化。

  • [使用ApplicationContext訂閱回調]
  • [在AbilityStage組件容器中訂閱回調]
  • [在UIAbility組件中訂閱回調]
  • [在ExtensionAbility組件中訂閱回調]
  • 發前請熟悉鴻蒙開發指導文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

使用ApplicationContext訂閱回調

[ApplicationContext]提供了注冊回調函數以訂閱系統環境變量的變化,并且可以通過調用相應的方法來撤銷該回調。這有助于在資源不再需要時釋放相關資源,從而提高系統的可靠性和性能。

  1. 使用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() {
        //...
      }
    }
    
  2. 在資源使用完成之后,可以通過調用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]對象獲取最新的系統環境配置信息。
搜狗高速瀏覽器截圖20240326151450.png

說明:
HarmonyOSOpenHarmony鴻蒙文檔籽料: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
收藏 人收藏

    評論

    相關推薦

    Linux環境變量配置方法

    Linux上環境變量配置分為設置永久變量和臨時變量兩種。環境變量設置方法同時要考慮環境Shell類型,不同類型的SHELL設置臨時
    的頭像 發表于 10-23 13:39 ?159次閱讀

    鴻蒙Flutter實戰:02-Windows環境搭建踩坑指南

    環境搭建 1. 下載Flutter SDK,配置環境變量 鴻蒙 Flutter SDK 需要在 Gitee 下載。目前建議下載 dev 分支代碼。 需要配置以下用戶變量 注意
    發表于 10-22 15:05

    Xilinx設計工具怎么設置環境變量

    如果您不確定如何設置環境變量,嘗試"1" 或 "TRUE"。
    的頭像 發表于 10-22 13:32 ?193次閱讀

    鴻蒙Flutter實戰:01-搭建開發環境

    ; 如果要適配ios,需要安裝Xcode Mac 安裝(推薦) 環境變量配置 # Flutter Mirror export PUB_HOSTED_URL=https
    發表于 10-21 19:35

    請問ENV設置環境變量怎么保存?

    我按照手冊設置好了環境變量 可是如果重啟一下env窗口 剛剛設置的又清掉了 請問下有沒有人知道怎么保存這個環境變量
    發表于 07-09 06:24

    utuntu環境下,ESP32和ESP8266設置環境變量時有沖突,怎樣兼容呢?

    ubuntu環境下,ESP32和ESP8266同時開發,設置環境變量PATH時遇到疑問,如下: export PATH=\"$HOME/esp/xtensa-esp32-elf/bin
    發表于 06-28 11:10

    esp32如何設置OPENOCD_SCRIPTS這個環境變量的值?

    esp32需要設置OPENOCD_SCRIPTS這個環境變量的值,但是設置之后會影響stm32使用openocd的調試,有什么好的辦法處理嗎?
    發表于 06-18 08:07

    鴻蒙系統優缺點,能否作為開發者選擇

    開發的崗位需求,尤其在這個大環境不好的情況下,會引出更多崗位。 鴻蒙開發崗位,不會內卷、薪資高、崗位多。對于開發者非常友好。 新型操作
    發表于 02-16 21:00

    使用 Taro 開發鴻蒙原生應用 —— 快速上手,鴻蒙應用開發指南

    隨著鴻蒙系統的不斷完善,許多應用廠商都希望將自己的應用移植到鴻蒙平臺上。最近,Taro 發布了 v4.0.0-beta.x 版本,支持使用 Taro 快速開發
    的頭像 發表于 02-02 16:09 ?859次閱讀
    使用 Taro <b class='flag-5'>開發</b><b class='flag-5'>鴻蒙</b>原生應用 —— 快速上手,<b class='flag-5'>鴻蒙</b>應用<b class='flag-5'>開發</b>指南

    Linux系統中設置環境變量的方法和技巧

    在Linux中環境變量是一種保存有關系統環境配置的信息的對象。它們被廣泛用于存儲有關系統操作的信息比如路徑、文件名等。通過合理配置環境變量
    的頭像 發表于 02-01 11:09 ?1679次閱讀
    Linux<b class='flag-5'>系統</b>中設置<b class='flag-5'>環境變量</b>的方法和技巧

    嵌入式學習-ElfBoard ELF 1板卡-配置環境變量永久生效的方法

    手冊中提供的配置環境變量的方法僅臨時生效,如果出現更換終端的情況,需要重新配置環境變量,這樣就比較麻煩。下面提供一種配置環境變量永久生效的方法,省去多次執行環境變量的步驟:1.vi打開
    發表于 01-17 15:19

    鴻蒙設備-開發板基礎學習(BearPi-HM Micro)

    板 + OpenHarmony小型系統”。BearPi-HM Micro是一款使用STM32MP157處理器的鴻蒙開發板,目前提供使用LiteOS-A操作系統內核OpenHarmony
    發表于 01-08 21:54

    鴻蒙開發南向環境搭建教學

    南向開發環境搭建教學,更多鴻蒙開發資料可以前往高清完整版 《鴻蒙開發4.0基礎-高階文檔》找保存
    發表于 01-05 16:38

    Linux環境變量配置方法

    想必大家平時工作中也會配置Linux的環境變量,但是可能也僅僅是為解決某些工具的運行環境,對于Linux環境變量本身的配置學問還沒深入了解。今天浩道跟大家分享Linux環境變量的硬核干
    的頭像 發表于 01-04 09:51 ?531次閱讀

    ros怎么設置環境變量

    設置ROS環境變量是使用ROS的重要步驟之一。本文將詳細介紹如何設置ROS環境變量,包括什么是環境變量、為什么要設置ROS環境變量、如何設置ROS
    的頭像 發表于 12-28 13:52 ?2049次閱讀
    主站蜘蛛池模板: 国产www视频| BL全肉多攻NP高H| 拍床戏被肉高H纯肉H在水| 调教日本美女| 亚洲蜜桃AV色情精品成人| 蜜桃99影院| 国产成人精品免费视频大全办公室| 亚洲国产精品无码中文字幕| 老师别揉我胸啊嗯小说| 超碰在线线公开免费视频| 亚洲精品九色在线网站| 美女的避毛| 国产精品JK白丝AV网站| 樱花之恋动漫免费观看| 日本免费无码A专区在线观看| 国产在线观看黄| 99精品在线看| 消息称老熟妇乱视频一区二区| 久久只精品99品免费久| 大地影院免费观看视频| 亞洲人妻AV無碼在線視頻| 欧美四虎精品二区免费| 国产真实夫妇交换视频| 99re在线播放| 亚洲AV无码偷拍在线观看| 男人J进女人P| 国产毛多水多高潮高清| 51国产午夜精品免费视频 | 十九禁啊啪射视频在线观看| 久久草香蕉频线观| 大伊人青草狠狠久久| 在教室轮流被澡高H林萌| 色欲档案之麻雀台上淫| 久久久久久久久久综合情日本| 粉色视频午夜网站入口| 在线观看永久免费网址| 丝瓜视频樱桃视频在线观看免费 | 国产精亚洲视频综合区| 做i爱视频30分钟免费| 五花大绑esebdsm国产| 暖暖日本大全免费观看|