【HarmonyOS】鸿蒙系统中应用权限等级介绍、定义、申请授权讲解

【HarmonyOS】鸿蒙系统中应用权限等级介绍、定义、申请授权讲解

针对权限等级,相对于主体来说,会有不同的细分概念。

一、权限APL等级:
首先在鸿蒙系统中,对于权限本身,分为三个等级:normal,system_basic,system_core

  1. 普通应用为normal,可以访问相机,WIFI信息等资源

  2. 特殊应用为system_basic,可以访问例如用户身份认证等资源。

  3. 系统应用为system_core,所有系统资源都可访问。

该权限等级的划分原则是,授予的权限对用户隐私以及操作系统带来的风险程度。

二、授权方式
对于系统授权给应用的方式不同,分为两种授权system_grant、user_grant

  1. system_grant(系统授权),只要应用配置了,系统默认会授权。
  2. user_grant(用户授权),应用需要配置,并且要在对应功能调用前主动申请,让用户抉择是否授权。

三、访问控制列表ACL
针对以上介绍,有一种场景需要解决,即:低APL等级的应用,某个业务场景需要使用高等级的权限。此时就需要ACL这种机制,为该应用,对于受限的权限单独开放绿色通道,可以访问。

如果应用涉及获取受限权限,在应用发布上架时,应用市场(AGC)将根据应用的使用场景审核是否可以使用对应的受限权限。如不符合,应用的上架申请将被驳回。

受限开放的权限通常是不允许三方应用申请的。如果有特殊场景需要使用,请提供相关申请材料到应用市场(AGC)申请相应权限证书。

整个过程很麻烦,建议使用Picker/控件等替代方案。

四、一般应用Normal等级,权限申请处理路径:
在这里插入图片描述
五、权限申请代码示例:

1. 首先我们需要在配置中对权限进行声明,以马达振动和相机权限为例:

在对应模块的module.json5配置中,添加requestPermissions节点和对应权限的配置:


{"module": {"name": "entry","type": "entry","description": "$string:module_desc","mainElement": "EntryAbility","deviceTypes": ["phone","tablet","2in1"],"deliveryWithInstall": true,"installationFree": false,"pages": "$profile:main_pages","abilities": [{"name": "EntryAbility","srcEntry": "./ets/entryability/EntryAbility.ets","description": "$string:EntryAbility_desc","icon": "$media:layered_image","label": "$string:EntryAbility_label","startWindowIcon": "$media:startIcon","startWindowBackground": "$color:start_window_background","exported": true,"skills": [{"entities": ["entity.system.home"],"actions": ["action.system.home"]}]}],// 在对应模块的module.json5配置中,添加requestPermissions节点和对应权限的配置:"requestPermissions": [{// 马达振动作为系统权限,不需要用户授权同意"name": "ohos.permission.VIBRATE"},{// 相机权限为用户权限,需要用户授权同意。所以要对权限使用的原因和场景进行描述。"name": "ohos.permission.CAMERA","reason": "$string:Camera_reason","usedScene": {"when": "always"}}]}
}

具体权限对应的分类参见:应用权限列表 如果不能访问说明不是白名单账户。


2.用户授权的权限在功能使用前,需要进行授权申请。

传统应用开发请求权限时,特别是Android,一般是在应用启动时进行申请。这种方式用户体验很差,自从IOS要求应用在用户不授权时,也能使用其他非授权功能的政策后。

目前应用授权的主流方式,已从应用开屏贴脸找用户要权限。进化为,点击启用某个业务功能时再授权。例如调用相机时,一般会从唤起相机功能的入口按钮处进行授权申请,用户不同意就不让用户进入,并且tips提示用户。


注意:主动申请用户判定是否授权时,若用户拒绝了该授权。之后应用再申请该权限,默认就会返回失败。需要通知用户去设置界面,给该权限授权。就不能通过弹框的形式直接处理了,此时授权场景已经转交给系统。


import { abilityAccessCtrl, common } from '@kit.AbilityKit';/*** 权限工具*/
export class PermissionsUtil{static async reqPermissionsFromUser(): Promise<number[]> {let context = getContext() as common.UIAbilityContext;let atManager = abilityAccessCtrl.createAtManager();let grantStatus = await atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA']);return grantStatus.authResults;}/*** 申请相机权限* @returns */static async requestCameraPermission() {let grantStatus = await PermissionsUtil.reqPermissionsFromUser()for (let i = 0; i < grantStatus.length; i++) {if (grantStatus[i] === 0) {// 用户授权,可以继续访问目标操作return true;}}return false;}
}
import { PermissionsUtil } from '../../utils/PermissionsUtil';
import { BusinessError } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';/*** 多层嵌套刷新渲染*/


struct permissionPage {private TAG: string = "permissionPage";private showToast(content: string){try {promptAction.showToast({message: content,duration: 2000});} catch (error) {let message = (error as BusinessError).messagelet code = (error as BusinessError).codeconsole.error(this.TAG, `showToast args error code is ${code}, message is ${message}`);};}onClickCamera = async ()=>{console.log(this.TAG, " onClickCamera");let isUserGrant: boolean = await PermissionsUtil.requestCameraPermission();if(isUserGrant){this.showToast("用户同意授权");}else{this.showToast("用户拒绝授权");}}build() {Row(){Button("调用相机").fontSize(px2vp(42)).size({width: px2vp(350),height: px2vp(200)}).onClick(this.onClickCamera)}.size({width: "100%",height: "100%"}).justifyContent(FlexAlign.Center)}
}

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

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

相关文章

(9)svelte 教程: Event Modifiers

&#xff08;9&#xff09;svelte 教程&#xff1a; Event Modifiers 什么是 Event Modifiers Event Modifiers 是 Svelte 框架中的一种特性&#xff0c;它允许你在绑定事件处理函数时&#xff0c;添加一些修饰符来修改事件的默认行为或事件流。通过这些修饰符&#xff0c;可…

SQL面试问题集

目录 Q.左连接和右连接的区别 Q.union 和 union all的区别 1、取结果的交集 2、获取结果后的操作 Q.熟悉开窗函数吗&#xff1f;讲一下row_number和dense_rank的区别。 Q.hive行转列怎么操作的 Q.要求手写的题主要考了聚合函数和窗口函数&#xff0c;row_number()&#…

TypeScript算法每日一题:最富有客户的资产总量(1672)

作者&#xff1a;前端小王hs 阿里云社区博客专家/清华大学出版社签约作者✍/CSDN百万访问博主/B站千粉前端up主 题库&#xff1a;力扣 题目序号&#xff1a;1672&#xff08;简单&#xff09; 题目&#xff1a;最富有客户的资产总量 给你一个m x n的整数网格accounts&#xff…

同一个tomcat不同端口运行不同项目

第一步&#xff1a;修改 server.xml 文件 修改 tomcat 安装目录下 conf/server.xml 文件&#xff0c;需要几个端口就添加几个 Service 节点。 配置 2 个端口&#xff1a;9131 和 9133&#xff0c;于是增加两个 Service 节点。 每个 Service 节点的 name 属性值要设置不同的值…

【MATLAB】雷达信号处理程序源码 雷达系统仿真代码 matlab SAR

【MATLAB】雷达信号处理程序源码 雷达系统仿真代码 matlab SAR 包含以下所有源码,内容如下&#xff1a;&#xff1a; 1、 MATGPR R3探地雷达数据处理 MATLAB 程序 2、 python 雷达图像识别 3、 SAR 雷达回波仿真 matlab 4、 SAR 雷达影像处理源码 5、 STFT 处理 IPIX 雷达…

开源协议及静态链接和动态链接

文章目录 开源LicenseMIT&#xff0c;BSD&#xff0c;Apache LicenseEPLGPL系列 静态链接和动态链接 开源License MIT&#xff0c;BSD&#xff0c;Apache License 这三种随便修改&#xff0c;商业上无风险 EPL 类似于上面三种 GPL系列 LGPL &#xff08;静态链接调用必须…

Vue3组件通信方式

1. 常用的组件通信方式&#xff1a; props&#xff1a;可以实现父子组件、子父组件、甚至兄弟组件通信 自定义事件&#xff1a;可以实现子父组件通信 全局事件总线$bus&#xff1a;可以实现任意组件通信 pubsub&#xff1a;发布订阅模式可以实现任意组件通信 vuex&#xf…

一个知识问答系统,用户的选择决定接下来出现的问题,且下一个问题的呈现取决于前面几个问题的回答

一个知识问答系统&#xff0c;用户的选择决定接下来出现的问题&#xff0c;且下一个问题的呈现取决于前面几个问题的回答&#xff0c;我们需要设计一个更复杂的图结构来表示这些关系。 设计图结构 Question节点&#xff1a;表示问题。Answer节点&#xff1a;表示答案。HAS_AN…

Flutter基础 -- Dart 语言 -- 类抽象接口继承函数库

目录 1. 类 class 1.1 定义、使用类 1.2 构造函数 1.3 初始化列表 1.4 命名构造函数 1.5 重定向构造函数 1.6 callable 2. 类 get set 2.1 定义、使用 get set 2.2 简化 get set 2.3 业务场景 3. 静态 static 3.1 static 定义 3.2 函数内部访问 3.3 静态方法 3…

嵌入式学习(Day:31 网络编程2:TCP)

client, server browser b/s http p2p peer TCP的特征&#xff1a;1.有链接&#xff1b;2.可靠传输&#xff1b;3.流式套接字 1、模式 C/S 模式 》服务器/客户端模型&#xff08;服务端1个&#xff0c;客户端很多个&#xff09; server:socket()-->bind()---…

数据分析常用模型合集(三)同期群、逻辑树、假设检验等

前面两篇文章&#xff0c;我们将比较大、较为系统的分析方法作了一个介绍&#xff0c;本文是最后一篇&#xff0c;将剩余的一些讲一讲。 数据分析常用模型合集&#xff08;二&#xff09;RARRA模型、RFM模型-CSDN博客 剩下的一些模型&#xff0c;其实不应叫做模型&#xff0c;…

qt+ffmpeg 实现音视频播放(四)之音视频同步

在处理音视频数据时&#xff0c;解码音频的数据往往会比解码视频的数据比较慢&#xff0c;所以我们在播放音视频时&#xff0c;音频和视频的数据会出现渐渐对不上的情况。尤其在播放时间越长的时候&#xff0c;这种对不上的现象越明显。 为了解决这一问题&#xff0c;人们想出…

PHP基础学习笔记(常用函数)

字符串 strlen — 获取字符串长度 <?php $str abcdef; echo strlen($str); // 6$str ab cd ; echo strlen($str); // 7 //strlen() 返回的是字符串的字节数&#xff0c;而不是其中字符的数量。 ?>strpos — 查找字符串首次出现的位置 $mystring abc; $findme …

051、Python 快速把多个元素连接成一个字符串的方法

要想快速地将列表或元组中的元素连接成一个字符串&#xff0c;有一个特别实用地方法&#xff1a;join() 方法。 join() 方法&#xff1a;一个用于将序列中的元素以指定的分隔符连接成一个字符串的方法&#xff0c;这个方法通常用于字符串操作。 基本语法&#xff1a; separa…

在windows操作系统上安装MariaDB

最近收到关于数据库在哪里看的评论&#xff0c;所以就一不做二不休&#xff0c;把安装数据库的步骤写一篇文章吧。 这篇文章介绍如何在windows上完成MariaDB-10.6.5版本的安装&#xff0c;对应MySQL-8.x版本。 第一步&#xff1a;下载安装包 通过以下网盘链接下载MariaDB-10.6…

Spark入门:KMeans聚类算法

聚类&#xff08;Clustering&#xff09; 是机器学习中一类重要的方法。其主要思想使用样本的不同特征属性&#xff0c;根据某一给定的相似度度量方式&#xff08;如欧式距离&#xff09;找到相似的样本&#xff0c;并根据距离将样本划分成不同的组。聚类属于典型的无监督学习&…

国产信创CPU之飞腾CPU剖析

CPU&#xff1a;信创根基&#xff0c;国之重器 国产CPU已形成自主架构、x86、ARM三大阵营。自主阵营中&#xff0c;龙芯、申威分别基于MIPS和Alpha推出loong ISA和SW-64。ARM阵营以鲲鹏、飞腾为代表&#xff0c;利用ARM IP授权开发处理器。x86阵营由海光、兆芯等主导&#xff…

【Linux】操作系统中的文件系统管理:磁盘结构、逻辑存储与文件访问机制

文章目录 前言&#xff1a;1. 磁盘机械结构2. 磁盘物理结构3. 磁盘的逻辑存储3. 1. 文件名呢&#xff1f;3.2 对文件的增删查改与 路径3.3. 文件 4. 软硬链接4.1. 操作观察现象4.2. 软硬链接的原理4.3. 软硬链接的应用场景 总结 前言&#xff1a; 在现代操作系统中&#xff0c…

day27-完全平方数(背包问题)

题目描述 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 3 和 1…

基于人工智能的运输路径规划系统

基于人工智能的运输路径规划系统是现代物流领域中一项重要的技术应用&#xff0c;该系统通过集成先进的人工智能算法和数据分析技术&#xff0c;为运输行业提供了更为高效、准确的路径规划服务。以下是关于该系统的详细介绍&#xff1a; 一、系统概述 基于人工智能的运输路径…