【最新鸿蒙应用开发】——Context上下文对象

应用上下文Context

1. 概述

应用上下文(Context)是应用程序的全局信息的接口。它是一个抽象类,提供了访问应用程序环境的方法和资源的方法。应用上下文可以用于获取应用程序的资源启动Ability发送广播等。每个应用程序都有一个应用上下文对象,它在整个应用程序的生命周期内都是唯一的。通过应用上下文,我们可以获得应用程序的全局状态和信息,以及访问应用程序的资源和功能。

在HarmonyOS中,Stage模型是一种应用程序的结构模型,它涵盖了应用程序的整个生命周期。而应用上下文Context则是在Stage模型中,表示应用程序的执行环境。

总而言之,Context提供了访问应用程序资源和服务的接口。

  • 各类Context的继承关系

  • 各类Context的持有关系

    常用的Context的获取

    • 获取UIAbilityContext。每个UIAbility中都包含了一个Context属性,提供操作应用组件、获取应用组件的配置信息等能力。

      import UIAbility from '@ohos.app.ability.UIAbility';
      import AbilityConstant from '@ohos.app.ability.AbilityConstant';
      import Want from '@ohos.app.ability.Want';
      export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {let uiAbilityContext = this.context;...}
      }

    说明:如果需要在页面中获得当前Ability的Context,可调用getContext接口获取当前页面关联的UIAbilityContext

    • 获取特定场景ExtensionContext。以ServiceExtensionContext为例,表示后台服务的上下文环境,继承自ExtensionContext,提供后台服务相关的接口能力。

      import ServiceExtensionAbility from '@ohos.app.ability.ServiceExtensionAbility';
      import Want from '@ohos.app.ability.Want';
      export default class MyService extends ServiceExtensionAbility {onCreate(want: Want) {let serviceExtensionContext = this.context;...}
      }

    • 获取AbilityStageContext。Module级别的Context,和基类Context相比,额外提供HapModuleInfo、Configuration等信息。

      import AbilityStage from '@ohos.app.ability.AbilityStage';
      export default class MyAbilityStage extends AbilityStage {onCreate() {let abilityStageContext = this.context;...}
      }

    • 获取ApplicationContext。应用级别的Context。ApplicationContext在基类Context的基础上提供了订阅应用内应用组件的生命周期的变化、订阅系统内存变化和订阅应用内系统环境的变化的能力,在UIAbility、ExtensionAbility、AbilityStage中均可以获取。

      import UIAbility from '@ohos.app.ability.UIAbility';
      import AbilityConstant from '@ohos.app.ability.AbilityConstant';
      import Want from '@ohos.app.ability.Want';
      export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {let applicationContext = this.context.getApplicationContext();...}
      }

2. 使用场景

常用两种场景中Context的用法:

  • 获取应用文件沙箱路径

  • 获取和修改加密分区

2.1. 获取应用文件沙箱路径

Context提供了获取应用文件路径的能力,ApplicationContext、AbilityStageContext、UIAbilityContext和ExtensionContext均继承该能力。获取的是应用文件的沙箱路径。

上述各类Context获取的应用文件路径有所不同。

  • 通过ApplicationContext获取应用级别的应用文件路径,此路径是应用全局信息推荐的存放路径,这些文件会跟随应用的卸载而删除。

    属性路径
    bundleCodeDir<路径前缀>/el1/bundle
    cacheDir<路径前缀>/<加密等级>/base/cache
    filesDir<路径前缀>/<加密等级>/base/files
    preferencesDir<路径前缀>/<加密等级>/base/preferences
    tempDir<路径前缀>/<加密等级>/base/temp
    databaseDir<路径前缀>/<加密等级>/database
    distributedFilesDir<路径前缀>/el2/distributedFiles

    示例代码如下所示。

    import UIAbility from '@ohos.app.ability.UIAbility';
    import AbilityConstant from '@ohos.app.ability.AbilityConstant';
    import Want from '@ohos.app.ability.Want';
    ​
    export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {let applicationContext = this.context.getApplicationContext();let cacheDir = applicationContext.cacheDir;let tempDir = applicationContext.tempDir;let filesDir = applicationContext.filesDir;let databaseDir = applicationContext.databaseDir;let bundleCodeDir = applicationContext.bundleCodeDir;let distributedFilesDir = applicationContext.distributedFilesDir;let preferencesDir = applicationContext.preferencesDir;...// 获取应用文件路径let filePath = tempDir + 'test.txt';console.info(`filePath: ${filePath}`);}
    }

  • 通过AbilityStageContext、UIAbilityContext、ExtensionContext获取HAP级别的应用文件路径。此路径是HAP相关信息推荐的存放路径,这些文件会跟随HAP的卸载而删除,但不会影响应用级别路径的文件,除非该应用的HAP已全部卸载。

    属性路径
    bundleCodeDir<路径前缀>/el1/bundle
    cacheDir<路径前缀>/<加密等级>/base/haps/<module-name>/cache
    filesDir<路径前缀>/<加密等级>/base/haps/<module-name>/files
    preferencesDir<路径前缀>/<加密等级>/base/haps/<module-name>/preferences
    tempDir<路径前缀>/<加密等级>/base/haps/<module-name>/temp
    databaseDir<路径前缀>/<加密等级>/database/<module-name>
    distributedFilesDir<路径前缀>/el2/distributedFiles/<module-name>

    示例代码如下所示。 

import UIAbility from '@ohos.app.ability.UIAbility';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
​
export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {let cacheDir = this.context.cacheDir;let tempDir = this.context.tempDir;let filesDir = this.context.filesDir;let databaseDir = this.context.databaseDir;let bundleCodeDir = this.context.bundleCodeDir;let distributedFilesDir = this.context.distributedFilesDir;let preferencesDir = this.context.preferencesDir;...// 获取应用文件路径let filePath = tempDir + 'test.txt';console.info(`filePath: ${filePath}`);}
}

2.2. 获取和修改加密分区

应用文件加密是一种保护数据安全的方法,可以使得文件在未经授权访问的情况下得到保护。在不同的场景下,应用需要不同程度的文件保护。对于私有文件,如闹铃、壁纸等,应用需要将这些文件放到设备级加密分区(EL1)中,以保证在用户输入密码前就可以被访问;对于更敏感的文件,如个人隐私信息等,应用需要将这些文件放到更高级别的加密分区(EL2)中,以保证更高的安全性。

在实际应用中,开发者需要根据不同场景的需求选择合适的加密分区,从而保护应用数据的安全。通过合理使用EL1和EL2加密分区,可以有效提高应用数据的安全性。

数据加密等级:

名称说明
EL10设备级加密区,设备开机后可访问的数据区。
EL21用户级加密区,设备开机,首次输入密码后才能够访问的数据区。
EL311+2用户级加密区,不同场景的文件权限如下:已打开文件:锁屏时,可读写;解锁后,可读写。未打开文件:锁屏时,不可打开、不可读写;解锁后,可打开、可读写。创建新文件:锁屏时,可创建、可打开、可写不可读;解锁后,可创建、可打开、可读写。
EL411+3用户级加密区,不同场景的文件权限如下:已打开文件:锁屏时,FEB2.0可读写、FEB3.0不可读写;解锁后,可读写。未打开文件:锁屏时,不可打开、不可读写;解锁后,可打开、可读写。创建新文件:锁屏时,不可创建;解锁后,可创建、可打开、可读写。

要实现获取和设置当前加密分区,可以通过读写Context的area属性来实现。

import UIAbility from '@ohos.app.ability.UIAbility';
import contextConstant from '@ohos.app.ability.contextConstant';
import AbilityConstant from '@ohos.app.ability.AbilityConstant';
import Want from '@ohos.app.ability.Want';
​
export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {// 存储普通信息前,切换到EL1设备级加密if (this.context.area === contextConstant.AreaMode.EL2) { // 获取areathis.context.area = contextConstant.AreaMode.EL1; // 修改area}// 存储普通信息
​// 存储敏感信息前,切换到EL2用户级加密if (this.context.area === contextConstant.AreaMode.EL1) { // 获取areathis.context.area = contextConstant.AreaMode.EL2; // 修改area}// 存储敏感信息}
}

3. 总结:

关于context相关得内容有哪些 , 他们的区别?

ApplicationContext是应用级别的Context,ApplicationContext在基类Context的基础上提供了订阅应用内Ability的生命周期的变化、订阅系统内存变化和订阅应用内系统环境的变化的能力,在UIAbility、ExtensionAbility、AbilityStage中均可以获取。

AbilityStageContext是Module级别的Context,和基类Context相比,额外提供HapModuleInfo、Configuration等信息。

UIAbilityContext是UIAbility的上下文环境,继承自Context。每个UIAbility中都包含了一个Context属性,提供操作Ability、获取Ability的配置信息、应用向用户申请授权等能力。Context模块提供了ability或application的上下文的能力,包括访问特定应用程序的资源等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】机器学习赋能医疗健康:从诊断到治疗的智能化革命

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f4d2;1. 引言&#x1f4d9;2. 机器学习在疾病诊断中的应用&#x1f9e9;医学影像分析&#xff1a;从X光到3D成像带代码&#x1…

NDS域名解析服务

3.1BIND域名服务基础 3.1.1 DNS系统的作用及类型 正向解析&#xff1a;根据域名查IP&#xff0c;即将指定的域名解析为相对应的IP地址。 反向解析&#xff1a;根据IP地址查域名&#xff0c;即将指定的IP地址解析为相对应的域名。 每一台DNS服务器都只负责管理一个有限范围内…

UltraISO 未找到虚拟光驱

VMWare Win7 虚拟机用 UltraISO 加载镜像时&#xff0c;提示“未找到虚拟光驱”&#xff1f; 1. 安装签名更新程序 https://www.catalog.update.microsoft.com/Search.aspx?qkb4474419 https://blog.csdn.net/m0_52072919/article/details/118895862 2. 打开 CMD, 进入…

C++面试准备

变量作用&#xff1a;给一段指定的内存空间起名&#xff0c;方便操作这段内存。 常量&#xff1a;用于记录程序中不可更改的数据。 #include <iostream> using namespace std;#define DAY 7 int main() {cout << "一周有" << DAY << "…

【Linux之·软件更新源】

系列文章目录 文章目录 前言一、 ARM架构二、x86架构总结 前言 一、 ARM架构 armv7l&#xff08; Ubuntu 14.04.4 LTS&#xff09; deb http://ports.ubuntu.com/ubuntu-ports/ trusty main restricted universe multiverse deb http://ports.ubuntu.com/ubuntu-ports/ trust…

路由器怎么设置局域网?

局域网&#xff08;Local Area Network&#xff0c;LAN&#xff09;是指在一个相对较小的地理范围内&#xff0c;如家庭、办公室或学校等&#xff0c;通过路由器等设备连接起来的计算机网络。设置局域网可以方便地实现内部资源共享和信息交流。本文将介绍如何设置局域网以及一个…

maven 显式依赖包包含隐式依赖包,引起依赖包冲突

问题&#xff1a;FlinkCDC 3.0.1 代码 maven依赖包冲突 什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包&#xff0c;有多个不同的版本&#xff0c;因而造成类包版本冲突 依赖冲突的原因 依赖冲突很经常是类包之间的间接依赖引起的。每个显式声明的类包都会依赖于一些其它…

Redis缓存(笔记三:Redis6新数据类型)

目录 1. 介绍 2. Bitmaps&#xff08;可以称为字符串&#xff0c;专门进行位操作的字符串&#xff09; 2.1 概念 2.2 setbit&#xff08;设置Bitmaps中某个偏移量的值&#xff09; 2.3 getbit&#xff08;获取Bitmaps中某个偏移量的值&#xff09; 2.4 bitcount&#xff…

Java I/O操作

引言 在Java编程中&#xff0c;输入和输出&#xff08;I/O&#xff09;操作是必不可少的部分。Java I/O通过一系列流&#xff08;Stream&#xff09;类和方法&#xff0c;支持文件操作、控制台输入输出、网络I/O等多种I/O操作。本文将详细介绍Java I/O的基础概念、文件操作、字…

vue实现类似微信按住发送语音给后端

一、需求是点击发送按钮说话获取语音文件发送给后台、鼠标移除即发送,限制时长30s 代码如下 <ttemplete><div class="bottom"><el-button type="primary" size="small" @mousedown.native="startRecord" @mouseup.n…

第二十七章 使用 MTOM 进行附件

文章目录 第二十七章 使用 MTOM 进行附件附件和 SOAP 消息打包具有全部内联部分的 SOAP 消息&#xff08;默认&#xff09; 第二十七章 使用 MTOM 进行附件 可以在 SOAP 请求和响应消息中包含附件。首选方法是使用 IRIS 数据平台对 MTOM&#xff08;消息传输优化机制&#xff…

FPGA专项课程即将开课,颁发AMD官方证书

社区成立以来&#xff0c;一直致力于为广大工程师提供优质的技术培训和资源&#xff0c;得到了众多用户的喜爱与支持。为了满足用户需求&#xff0c;我们特别推出了“基于Vitis HLS的高层次综合及图像处理开发”课程。 本次课程旨在帮助企业工程师掌握前沿的FPGA技术&#xff…

携程任我行礼品卡怎么用?

前两天我用积分兑了张携程卡&#xff0c;但是最近有没有假期&#xff0c;这张携程卡又不知道咋用 最后朋友告诉我可以在收卡云上转让&#xff0c; 去收卡云看了一眼&#xff0c;携程卡现在99.1折&#xff0c;果断出了&#xff0c;到账速度好快啊

Java多线程编程与并发处理

引言 在现代编程中&#xff0c;多线程和并发处理是提高程序运行效率和资源利用率的重要方法。Java提供了丰富的多线程编程支持&#xff0c;包括线程的创建与生命周期管理、线程同步与锁机制、并发库和高级并发工具等。本文将详细介绍这些内容&#xff0c;并通过表格进行总结和…

MySQL----主键、唯一、普通索引的创建与删除

创建索引 CREATE INDEX index_name ON table_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);CREATE INDEX: 用于创建普通索引的关键字。index_name: 指定要创建的索引的名称。索引名称在表中必须是唯一的。table_name: 指定要在哪个表上创建索引。(column1, column2, ……

IntelliJ IDEA 用maven创建web项目

前言 已经安装并配置好Tomcat。具体步骤&#xff1a;Tomcat安装及环境变量配置(一看就会)-CSDN博客​编辑https://blog.csdn.net/longyongyyds/article/details/135825647 具体步骤 1.新建一个maven项目 2&#xff0c;配置好tomcat服务器 3.运行测试一下 maven教程&#xf…

前端面试题(四)|求职季面试分享|答案版

面试形式&#xff1a;线上面试&#xff1a;&#xff08;一面&#xff1a;电话&#xff09;&#xff1a;时长10分钟 面试评价&#xff1a;面试官介绍公司业务面试者倾听介绍 面试官&#xff1a;技术人员 面试官的提问大纲&#xff1a;本公司招聘要求 面试官提问&#xff08;面试…

使用PHP对接企业微信审批接口的流程和基本接口(一)

在现代企业中&#xff0c;审批流程是非常重要的一环&#xff0c;它涉及到企业内部各种业务流程的规范和高效运转。而随着企业微信的流行&#xff0c;许多企业希望将审批流程整合到企业微信中&#xff0c;以实现更便捷的审批操作。本文将介绍如何使用PHP对接企业微信审批接口&am…

鸿蒙轻内核A核源码分析系列四(3) 虚拟内存

4.2 函数LOS_RegionAlloc 函数LOS_RegionAlloc用于从地址空间中申请空闲的虚拟地址区间。参数较多&#xff0c;LosVmSpace *vmSpace指定虚拟地址空间&#xff0c;VADDR_T vaddr指定虚拟地址&#xff0c;当为空时&#xff0c;从映射区申请虚拟地址&#xff1b;当不为空时&#…

响应式网页开发方法与实践

随着移动设备的普及和多样化&#xff0c;响应式网页开发已成为现代网页设计的主流趋势。响应式网页&#xff08;Responsive Web Design, RWD&#xff09;是一种网页设计技术&#xff0c;其核心思想是通过灵活的布局和媒体查询&#xff0c;使网页能够适应不同设备和屏幕尺寸&…