ApplicationContext

ApplicationContext模块提供开发者应用级别的的上下文的能力,包括提供注册及取消注册应用内组件生命周期的监听接口。

说明:

本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 本模块接口仅可在Stage模型下使用。

导入模块

import common from '@ohos.app.ability.common';

使用说明

在使用ApplicationContext的功能前,需要通过context的实例获取。

let applicationContext: common.ApplicationContext = this.context.getApplicationContext();

ApplicationContext.on(type: 'abilityLifecycle', callback: AbilityLifecycleCallback)

on(type: 'abilityLifecycle', callback: AbilityLifecycleCallback): number;

注册监听应用内生命周期

系统能力:SystemCapability.Ability.AbilityRuntime.Core

参数:

参数名 类型 必填 说明
type 'abilityLifecycle' 监听事件的类型。
callback AbilityLifecycleCallback 回调方法,返回注册监听事件的ID。

返回值:

类型 说明
number 返回的此次注册监听生命周期的ID(每次注册该ID会自增+1,当超过监听上限数量2^63-1时,返回-1)。

示例:

import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityLifecycleCallback from '@ohos.app.ability.AbilityLifecycleCallback';

let lifecycleId: number;

export default class EntryAbility extends UIAbility {
    onCreate() {
        console.log('MyAbility onCreate');
        let AbilityLifecycleCallback: AbilityLifecycleCallback = {
            onAbilityCreate(ability) {
                console.log(`AbilityLifecycleCallback onAbilityCreate ability: ${ability}`);
            },
            onWindowStageCreate(ability, windowStage) {
                console.log(`AbilityLifecycleCallback onWindowStageCreate ability: ${ability}`);
                console.log(`AbilityLifecycleCallback onWindowStageCreate windowStage: ${windowStage}`);
            },
            onWindowStageDestroy(ability, windowStage) {
                console.log(`AbilityLifecycleCallback onWindowStageDestroy ability: ${ability}`);
                console.log(`AbilityLifecycleCallback onWindowStageDestroy windowStage: ${windowStage}`);
            },
            onAbilityDestroy(ability) {
                console.log(`AbilityLifecycleCallback onAbilityDestroy ability: ${ability}`);
            },
            onAbilityForeground(ability) {
                console.log(`AbilityLifecycleCallback onAbilityForeground ability: ${ability}`);
            },
            onAbilityBackground(ability) {
                console.log(`AbilityLifecycleCallback onAbilityBackground ability: ${ability}`);
            },
            onAbilityContinue(ability) {
                console.log(`AbilityLifecycleCallback onAbilityContinue ability: ${ability}`);
            }
        }
        // 1.通过context属性获取applicationContext
        let applicationContext = this.context.getApplicationContext();
        // 2.通过applicationContext注册监听应用内生命周期
        lifecycleId = applicationContext.on('abilityLifecycle', AbilityLifecycleCallback);
        console.log(`registerAbilityLifecycleCallback lifecycleId: ${lifecycleId}`);
    }
}

ApplicationContext.off(type: 'abilityLifecycle', callbackId: number, callback: AsyncCallback<void>)

off(type: 'abilityLifecycle', callbackId: number, callback: AsyncCallback<void>): void;

取消监听应用内生命周期

系统能力:SystemCapability.Ability.AbilityRuntime.Core

参数:

参数名 类型 必填 说明
type 'abilityLifecycle' 取消监听事件的类型。
callbackId number 注册监听应用内生命周期的ID。
callback AsyncCallback<void> 回调方法。

示例:

import UIAbility from '@ohos.app.ability.UIAbility';

let lifecycleId: number;

export default class EntryAbility extends UIAbility {
    onDestroy() {
        let applicationContext = this.context.getApplicationContext();
        console.log(`stage applicationContext: ${applicationContext}`);
        applicationContext.off('abilityLifecycle', lifecycleId, (error, data) => {
            if (error) {
                console.error(`unregisterAbilityLifecycleCallback fail, err: ${JSON.stringify(error)}`);
            } else {
                console.log(`unregisterAbilityLifecycleCallback success, data: ${JSON.stringify(data)}`);
            }
        });
    }
}

ApplicationContext.on('applicationStateChange')16+

on(type: 'applicationStateChange', callback: ApplicationStateChangeCallback): void

注册对当前应用前后台变化的监听。使用callback异步回调。仅支持主线程调用。

系统能力:SystemCapability.Ability.AbilityRuntime.Core

支持平台:Android、iOS

参数:

参数名 类型 必填 说明 Android平台 iOS平台
type 'applicationStateChange' 监听事件类型。 支持 支持
callback ApplicationStateChangeCallback 回调函数。可以对应用从后台切换到前台,以及前台切换到后台分别定义回调。 支持 支持

错误码

以下错误码详细介绍请参考通用错误码

错误码ID 错误信息
401 Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types.

示例:

import { UIAbility, ApplicationStateChangeCallback } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

export default class MyAbility extends UIAbility {
  onCreate() {
    console.log('MyAbility onCreate');
    let applicationStateChangeCallback: ApplicationStateChangeCallback = {
      onApplicationForeground() {
        console.info('applicationStateChangeCallback onApplicationForeground');
      },
      onApplicationBackground() {
        console.info('applicationStateChangeCallback onApplicationBackground');
      }
    }

    // 1.获取applicationContext
    let applicationContext = this.context.getApplicationContext();
    try {
      // 2.通过applicationContext注册应用前后台状态监听
      applicationContext.on('applicationStateChange', applicationStateChangeCallback);
    } catch (paramError) {
      console.error(`error: ${(paramError as BusinessError).code}, ${(paramError as BusinessError).message}`);
    }
    console.log('Resgiter applicationStateChangeCallback');
  }
}

ApplicationContext.off('applicationStateChange')16+

off(type: 'applicationStateChange', callback?: ApplicationStateChangeCallback): void

取消当前应用注册的前后台变化的全部监听。使用callback异步回调。仅支持主线程调用。

系统能力:SystemCapability.Ability.AbilityRuntime.Core

支持平台:Android、iOS

参数:

参数名 类型 必填 说明 Android平台 iOS平台
type 'applicationStateChange' 取消监听事件的类型。 支持 支持
callback ApplicationStateChangeCallback 回调函数。可以对应用从后台切换到前台,以及前台切换到后台分别定义回调。 支持 支持

错误码

以下错误码详细介绍请参考通用错误码

错误码ID 错误信息
401 Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types.

示例:

import { UIAbility } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

export default class MyAbility extends UIAbility {
  onDestroy() {
    let applicationContext = this.context.getApplicationContext();
    try {
      applicationContext.off('applicationStateChange');
    } catch (paramError) {
      console.error(`error: ${(paramError as BusinessError).code}, ${(paramError as BusinessError).message}`);
    }
  }
}

ApplicationContext.getRunningProcessInformation9+

getRunningProcessInformation(): Promise<Array<ProcessInformation>>;

获取有关运行进程的信息。

需要权限:ohos.permission.GET_RUNNING_INFO

系统能力:SystemCapability.Ability.AbilityRuntime.Core

系统API: 此接口为系统接口,三方应用不支持调用。

返回值:

类型 说明
Promise<Array<ProcessInformation>> 以Promise方式返回接口运行结果及有关运行进程的信息,可进行错误处理或其他自定义处理。

错误码

错误码ID 错误信息
16000011 The context does not exist.
16000050 Internal error.

以上错误码详细介绍请参考errcode-ability

示例:

import UIAbility from '@ohos.app.ability.UIAbility';
import { BusinessError } from '@ohos.base';

export default class MyAbility extends UIAbility {
    onForeground() {
        let applicationContext = this.context.getApplicationContext();
        applicationContext.getRunningProcessInformation().then((data) => {
            console.log(`The process running information is: ${JSON.stringify(data)}`);
        }).catch((error: BusinessError) => {
            console.error(`error: ${JSON.stringify(error)}`);
        });
    }
}

ApplicationContext.getRunningProcessInformation9+

getRunningProcessInformation(callback: AsyncCallback<Array<ProcessInformation>>): void;

获取有关运行进程的信息。

需要权限:ohos.permission.GET_RUNNING_INFO

系统能力:SystemCapability.Ability.AbilityRuntime.Core

系统API: 此接口为系统接口,三方应用不支持调用。

返回值:

类型 说明
AsyncCallback<Array<ProcessInformation>> 以回调方式返回接口运行结果及有关运行进程的信息,可进行错误处理或其他自定义处理。

错误码

错误码ID 错误信息
16000011 The context does not exist.
16000050 Internal error.

以上错误码详细介绍请参考errcode-ability

示例:

import UIAbility from '@ohos.app.ability.UIAbility';

export default class MyAbility extends UIAbility {
    onForeground() {
        let applicationContext = this.context.getApplicationContext();
        applicationContext.getRunningProcessInformation((err, data) => {
            if (err) {
                console.error(`getRunningProcessInformation faile, err: ${JSON.stringify(err)}`);
            } else {
                console.log(`The process running information is: ${JSON.stringify(data)}`);
            }
        })
    }
}

ApplicationContext.setColorMode16+

setColorMode(colorMode: ConfigurationConstant.ColorMode): void

设置应用的颜色模式。仅支持主线程调用。

系统能力:SystemCapability.Ability.AbilityRuntime.Core

支持平台:Android、iOS

参数:

参数名 类型 必填 说明 Android平台 iOS平台
colorMode ColorMode 设置颜色模式,包括:深色模式、浅色模式、不设置(跟随系统)。 支持 支持

错误码

以下错误码详细介绍请参考通用错误码元能力子系统错误码

错误码ID 错误信息
401 Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types.
16000011 The context does not exist.

示例:

import { UIAbility, ConfigurationConstant } from '@kit.AbilityKit';

export default class MyAbility extends UIAbility {
  onForeground() {
    let applicationContext = this.context.getApplicationContext();
    applicationContext.setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_DARK);
  }
}

ApplicationContext.setFont21+

setFont(font: string): void

设置应用的字体类型。仅支持主线程调用。

说明:

调用该接口前,需要确保窗口已完成创建、且UIAbility对应的页面已完成加载,即在onWindowStageCreate()生命周期中通过loadContent方法加载页面之后调用。

全局使用非原生系统字体时,可通过 ApplicationContext.setFont 进行设置。示例请参考:ArkUI-X上如何在全局使用非原生系统字体

系统能力:SystemCapability.Ability.AbilityRuntime.Core

支持平台:Android、iOS

参数:

参数名 类型 必填 说明
font string 设置字体类型,字体可以通过UIContext.registerFont方法进行注册使用。

错误码

以下错误码详细介绍请参考通用错误码元能力子系统错误码

错误码ID 错误信息
16000011 The context does not exist.
16000050 Internal error.

示例:

import { font } from '@kit.ArkUI';
import { common } from '@kit.AbilityKit';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  context = this.getUIContext().getHostContext() as common.UIAbilityContext;

  aboutToAppear() {
    this.getUIContext().getFont().registerFont({
      familyName: 'fontName',
      familySrc: $rawfile('font/medium.ttf')
    })

    this.context.getApplicationContext().setFont("fontName");
  }

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(50)
      }
      .width('100%')
    }
    .height('100%')
  }
}

ApplicationContext.setFontSizeScale21+

setFontSizeScale(fontSizeScale: number): void

设置应用字体大小缩放比例。仅支持主线程调用。

系统能力:SystemCapability.Ability.AbilityRuntime.Core

支持平台:Android、iOS

参数:

参数名 类型 必填 说明
fontSizeScale number 表示字体缩放比例,取值为非负数。当应用字体跟随系统且该字段取值超过fontSizeMaxScale取值时,实际生效值为fontSizeMaxScale取值。

示例:

import { UIAbility } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';

export default class MyAbility extends UIAbility {
  onWindowStageCreate(windowStage: window.WindowStage) {
    windowStage.loadContent('pages/Index', (err, data) => {
      if (err.code) {
        return;
      }
      let applicationContext = this.context.getApplicationContext();
      applicationContext.setFontSizeScale(2);
    });
  }
}

ApplicationContext.setLanguage21+

setLanguage(language: string): void

设置应用的语言。仅支持主线程调用。

说明:

调用该接口前,需要确保窗口已完成创建、且UIAbility对应的页面已完成加载,即在onWindowStageCreate()生命周期中通过loadContent方法加载页面之后调用。

系统能力:SystemCapability.Ability.AbilityRuntime.Core

支持平台:Android、iOS

参数:

参数名 类型 必填 说明
language string 设置语言,当前支持的语言列表可以通过getSystemLanguages()获取。

错误码

以下错误码详细介绍请参考通用错误码元能力子系统错误码

错误码ID 错误信息
16000011 The context does not exist.

示例:

import { UIAbility } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';

export default class MyAbility extends UIAbility {
  onWindowStageCreate(windowStage: window.WindowStage) {
    console.info("Ability onWindowStageCreate");
    windowStage.loadContent('pages/Index', (err, data) => {
      if (err.code) {
        console.error(`Failed to load the content. Code: ${err.code}, message: ${err.message}`);
        return;
      }
      console.info(`Succeeded in loading the content. Data: ${JSON.stringify(data)}`);
    });
    let applicationContext = this.context.getApplicationContext();
    applicationContext.setLanguage('zh-cn');
  }
}