
回复
在开发中,通过会涉及到不同的Context,比如要监听应用的前后台状态变化需要用到ApplicationContext,启动一个ability需要用到UIAbilityContext,配置键盘避让模式需要用到UIContext,今天总结一下各个context的作用和区别。
// 1.通过context属性获取applicationContext
let applicationContext = this.context.getApplicationContext();
//注册对当前应用前后台状态变化的监听
try {
// 2.通过applicationContext注册应用前后台状态监听
applicationContext.on('applicationStateChange', {
onApplicationForeground() {},
onApplicationBackground() {}
});
} catch (paramError) {}
//3.获取有关运行进程的信息
applicationContext.getRunningProcessInformation().then((data) => {
//pid 进程ID。
//uid 用户ID
//processName 进程名称
//bundleNames 进程中所有运行的Bundle名称
//state 当前进程状态
}).catch((error: BusinessError) => {
});
//4.终止应用的所有进程
applicationContext.killAllProcesses();
//5.设置应用的深浅色模式。仅支持主线程调用
applicationContext.setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_DARK);
let abilityStageContext = this.context;
// 获取当前模块名
let name = abilityStageContext.currentHapModuleInfo.name;
// 获取当前模块语言
let language = abilityStageContext.config.language;
HapModuleInfo
名称 | 说明 |
---|---|
name | 模块名称 |
icon | 模块图标 |
iconId | 模块图标的资源id值 |
label | 模块标签 |
labelId | 模块标签的资源id值 |
description | 模块描述信息 |
descriptionId | 描述信息的资源id值 |
mainElementName | 当前模块的入口UIAbility名称 |
abilitiesInfo | Ability信息 |
Configuration | |
名称 | 说明 |
– | – |
language | 表示应用程序的当前语言,例如“zh" |
colorMode | 表示深浅色模式 |
direction | 表示屏幕方向 |
screenDensity | 表示屏幕像素密度 |
displayId | 表示应用所在的物理屏幕ID |
hasPointerDevice | 指针类型设备是否已连接,如键鼠、触控板 |
//Ability中获取
this.context
//UI组件中获取
let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
//启动一个Ability
startAbility(want: Want, options?: StartOptions)
//启动一个UIAbility,并通过回调函数接收被拉起的UIAbility退出时的返回结果
startAbilityForResult(want: Want, options: StartOptions, callback: AsyncCallback<AbilityResult>)
//设置UIAbility任务的流转状态
setMissionContinueState(state: AbilityConstant.ContinueState, callback: AsyncCallback<void>)
//启动一个支持模态弹框的ServiceExtensionAbility
requestDialogService(want: Want, result: AsyncCallback<dialogRequest.RequestResult>)
//销毁UIAbility自身
terminateSelf(callback: AsyncCallback<void>)
//在存在Window实例的情况下
onWindowStageCreate(windowStage: window.WindowStage): void {
this.uiContext= windowStage.getMainWindowSync().getUIContext()
}
//在UI组件内获取
uiContext = this.getUIContext()
//获取组件大小、位置、平移、缩放、旋转及仿射矩阵属性信息。
let componentUtils: ComponentUtils = uiContext.getComponentUtils();
let modePosition = componentUtils.getRectangleById("onClick");
let localOffsetWidth = modePosition.size.width;
let localOffsetHeight = modePosition.size.height;
let localOffsetX = modePosition.localOffset.x;// 获取组件相对于父组件的x轴偏移
let localOffsetY = modePosition.localOffset.y;// 获取组件相对于父组件的y轴偏移
//获取到PromptAction对象
let promptAction: PromptAction = uiContext.getPromptAction();
//创建并显示文本提示框
promptAction.showToast(options: promptAction.ShowToastOptions)
//创建并显示对话框
promptAction.showDialog(options: promptAction.ShowDialogOptions)
//创建并显示操作菜单
promptAction.showActionMenu(options: promptAction.ActionMenuOptions)
//创建并弹出自定义弹窗
promptAction.openCustomDialog(options: promptAction.CustomDialogOptions)
//显示警告弹窗组件
uiContext.showAlertDialog(options: AlertDialogParamWithConfirm | AlertDialogParamWithButtons | AlertDialogParamWithOptions)
//定义列表弹窗并弹出
uiContext.showActionSheet(value: ActionSheetOptions)
//定义日期滑动选择器弹窗并弹出
uiContext.showDatePickerDialog(options: DatePickerDialogOptions)
//定义时间滑动选择器弹窗并弹出
uiContext.showTimePickerDialog(options: TimePickerDialogOptions)
//定义文本滑动选择器弹窗并弹出
uiContext.showTextPickerDialog(options: TextPickerDialogOptions)
//配置虚拟键盘弹出时,页面的避让模式
uiContext.setKeyboardAvoidMode(value: KeyboardAvoidMode)
//获取Router对象
uiContext.getRouter();
//代码控制弹出软键盘
this.getUIContext().getFocusController().requestFocus('指定输入框id');
//代码控制收起软键盘
this.getUIContext().getFocusController().clearFocus();
//返回当前组件所在Ability的Context,在UIAbility窗口中的页面调用该接口,返回类型为UIAbilityContext
this.getUIContext().getHostContext()
//计算指定文本单行布局下的宽度
this.uiContext.getMeasureUtils().measureText(options: MeasureOptions)
UIContext是指UI实例上下文,用于关联窗口与UI页面。与本文档中的应用上下文Context无直接关联,不存在继承或持有关系