高质量 HarmonyOS 权限管控流程

高质量 HarmonyOS 权限管控流程

HarmonyOS 应用开发过程中,往往会涉及到敏感数据硬件资源的调动和访问,而这部分的调用就会涉及到管控这部分的知识和内容了。我们需要对它有所了解,才可以在应用开发中提高效率和避免踩坑。

权限管控了什么

权限管控,主要是管控 数据功能

  • 数据包括个人数据(如照片、通讯录、日历、位置等)、设备数据(如设备标识、相机、麦克风等)。
  • 功能包括设备功能(如访问摄像头/麦克风、打电话、联网等)、应用功能(如弹出悬浮窗、创建快捷方式等)。

权限组和子权限

我们先看什么是子权限。比如对于媒体相册的功能操作来说。读取相册内容是一种权限、写入内容到相册是一种权限。 那么它们属于媒体相册这个大权限中的子权限。那么我们的应用在申请媒体相册的读写权限时,考虑到用户的体验。其实是会把两个权限合并为一个弹出窗口,询问用户授予权限。如果用户允许了,那么就等于获得了媒体相册的读写权限了。总结就是

  • 读取媒体相册是子权限、写入媒体相册是子权限
  • 它们合起来就是一个权限组。

image-20240608002954074

权限组和子权限一览

链接

位置信息
ohos.permission.LOCATION_IN_BACKGROUNDohos.permission.LOCATIONohos.permission.APPROXIMATELY_LOCATION相机
ohos.permission.CAMERA
麦克风
ohos.permission.MICROPHONE
通讯录
ohos.permission.READ_CONTACTSohos.permission.WRITE_CONTACTS日历
ohos.permission.READ_CALENDARohos.permission.WRITE_CALENDARohos.permission.READ_WHOLE_CALENDARohos.permission.WRITE_WHOLE_CALENDAR健身运动
ohos.permission.ACTIVITY_MOTION
身体传感器
ohos.permission.READ_HEALTH_DATA
图片和视频
ohos.permission.WRITE_IMAGEVIDEOohos.permission.READ_IMAGEVIDEOohos.permission.MEDIA_LOCATION音乐和音频
ohos.permission.WRITE_AUDIOohos.permission.READ_AUDIO文件
ohos.permission.READ_DOCUMENTohos.permission.WRITE_DOCUMENTohos.permission.READ_MEDIAohos.permission.WRITE_MEDIA广告跟踪
ohos.permission.APP_TRACKING_CONSENT
读取已安装应用列表
ohos.permission.GET_INSTALLED_BUNDLE_LIST
多设备协同
ohos.permission.DISTRIBUTED_DATASYNC
蓝牙
ohos.permission.ACCESS_BLUETOOTH
电话
ohos.permission.ANSWER_CALLohos.permission.MANAGE_VOICEMAIL通话记录
ohos.permission.READ_CALL_LOGohos.permission.WRITE_CALL_LOG信息
ohos.permission.READ_CELL_MESSAGESohos.permission.READ_MESSAGESohos.permission.RECEIVE_MMSohos.permission.RECEIVE_SMSohos.permission.RECEIVE_WAP_MESSAGESohos.permission.SEND_MESSAGES剪切板
ohos.permission.READ_PASTEBOARD
文件夹
ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORYohos.permission.READ_WRITE_DESKTOP_DIRECTORYohos.permission.READ_WRITE_DOCUMENTS_DIRECTORY

APL等级

APL(Ability Privilege Level,元能力权限等级)等级,分为两类。一类是应用APL等级、另一类是权限APL等级。说人话就是 不管官阶的士官和其对应的权限之间的关系。

应用APL等级

应用APL等级分为三级:

APL级别说明
normal默认情况下,应用的APL等级都为normal等级。
system_basic该等级的应用服务提供系统基础服务。
system_core该等级的应用服务提供操作系统核心能力。 应用APL等级不允许配置为system_core。

权限APL等级

权限APL等级也分为三级:

APL级别说明开放范围
normal允许应用访问超出默认规则外的普通系统资源,如配置Wi-Fi信息、调用相机拍摄等。 这些系统资源的开放(包括数据和功能)对用户隐私以及其他应用带来的风险低。APL等级为normal及以上的应用。
system_basic允许应用访问操作系统基础服务(系统提供或者预置的基础功能)相关的资源,如系统设置、身份认证等。 这些系统资源的开放对用户隐私以及其他应用带来的风险较高。APL等级为system_basic及以上的应用。
system_core涉及开放操作系统核心资源的访问操作。这部分系统资源是系统最核心的底层服务,如果遭受破坏,操作系统将无法正常运行。- APL等级为system_core的应用。 - 仅对系统应用开放。

访问控制列表(ACL)

权限等级和应用APL等级是一一对应的。原则上,拥有低APL等级的应用默认无法申请更高等级的权限。访问控制列表ACL(Access Control List)提供了解决低等级应用访问高等级权限问题的特殊渠道。我们可以将ACL理解为让普通的老百姓也具有某种士官的能力,如调兵遣将

需要注意的是,并不是所有的权限都能通过申请ACL来实现跨等级的应用来获得。具体哪些权限可以被跨等级申请使用。HarmonyOS中也有明确标识的。如: 链接

image-20240608004247416

授权方式

不管是什么的方式申请权限,最后在用户的体验上一共分为两种。 system_grant(系统授权) 和 user_grant(用户授权)

  1. system_grant(系统授权)

    • 应用被允许访问的数据不会涉及到用户或设备的敏感信息
    • 需要在安装包中申请system_grant权限,那么系统会在用户安装应用时,自动把相应权限授予给应用
  2. user_grant(用户授权)

    • 会弹出窗口询问用户的意见-应用被允许访问的数据将会涉及到用户或设备的敏感信息

    • 需要注意的是,如果用户增加拒绝过授权,那么只能通过引导用户到系统设置页面来手动打开权限

    image-20240608004726930

申请应用权限流程

一图胜万言

总流程图

image-20240608004827845


normal等级的应用申请权限

image-20240608005114527

system_basic等级的应用申请权限

image-20240608005144778

申请应用权限操作步骤

1.声明权限-必须

  1. main/module.json5 中 配置 requestPermissions 字段声明权限

  2. 配置内容

    image-20240608005334602

2.声明ACL权限-非必须

参考链接

image-20240608005438191

3.向用户申请授权-非必须

如果你申请的权限类型是 system_grant(系统授权),那么可以跳过这个步骤。如果你申请的权限类型是 user_grant(用户授权),那么需要主动申请权限,此时用户会弹出对话框。如

import abilityAccessCtrl, { Context, PermissionRequestResult } from '@ohos.abilityAccessCtrl';
import { BusinessError } from '@ohos.base';
import common from '@ohos.app.ability.common';let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
let context: Context = getContext(this) as common.UIAbilityContext;
// 申请摄像头权限
atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA']).then((data: PermissionRequestResult) => {console.info('data:' + JSON.stringify(data));console.info('data permissions:' + data.permissions);console.info('data authResults:' + data.authResults);
}).catch((err: BusinessError) => {console.info('data:' + JSON.stringify(err));
});

此图只做演示,不和上述代码具体效果一一对应

image-20240608002954074

4.访问接口-必须

此时,就可以直接调用相关接口,实现业务功能

附上述流程思维导图

image-20240608010002233


image-20240608010016337

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

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

相关文章

19、Go Gin框架集成Swagger

介绍: Swagger 支持在 Gin 路由中使用一系列注释来描述 API 的各个方面。以下是一些常用的 Swagger 注释属性,这些属性可以在 Gin 路由的注释中使用: Summary: 路由的简短摘要。Description: 路由的详细描述。Tags: 用于对路由进行分类的标…

数据挖掘--数据仓库与联机分析处理

什么是数据仓库 (面集时非) 面向主题的:围绕某一主题来构建集成的:图片文字杂糅在一起时变的:随时间变化的数据非易失的:硬盘存放,不易丢失 操作数据库系统(OLTP)与数据仓库(OLAP…

MySQL将错乱的水果信息,截取展示为 品名 英文名 价格 三列展示

将错乱的水果信息,截取展示为 品名 英文名 价格 三列展示 idname1苹果Apple72Plum6李子3Pineapple8菠萝4Mango5芒果5龙吐珠5Buddha’sHand6Olive9橄榄7Raspberry4树莓8Apricot5杏子9Grapefruit9柚子10火龙果Dragonfruit911倒挂金钟Hanging6LobsterClaw12巨峰葡萄Co…

AI办公自动化:批量把docx文档转换为txt文本

任务:把docx文档批量转换成txt,首先让deepseek写了一段代码,但是转换失败。用的是最流行的python-docx库来读取docx文档,但是始终无法读取成功,换成pywin32库就解决问题了。 在deepseek中输入提示词: 写一…

【背包-BM70 兑换零钱(一)】

题目 BM70 兑换零钱(一) 描述 给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱数,求组成aim的最少货币数。 如果无解,…

docker 命令 ps,inspect,top,logs详解

docker常用命令教程-4 docker ps docker ps 命令用于列出当前正在运行的容器。默认情况下,它只显示正在运行的容器,但你可以使用 -a 或 --all 选项来显示所有容器(包括已停止的容器)。 常用的选项和示例: -a 或 --…

【C语言题解】1、写一个宏来计算结构体中某成员相对于首地址的偏移量;2、写一个宏来交换一个整数二进制的奇偶位

🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊ 🌈感谢大家的阅读、点赞、收藏和关注 💕希望大家喜欢我本次的讲解💕 目录👑 1、写一个宏,计算结构体中某变量相对于首地址的偏…

UE4获取动画序列资产的动画时长

谢谢”朝闻道“大佬的指点~

(UE4.26)UE4的FArchive序列化入门

前言 序列化(Serialize)和反序列化(UnSerialize)是程序领域常见的概念。对于这两个词汇我理解的是 序列化(Serialize): 变量值(int, float, string等基本类型, 或者Array,Map,或者更复杂的复合体)存储为一个文件(二进制流, 二进制文件, json, xml等格式…

C++并发之互斥(std::mutex)

目录 1 概述2 使用实例3 接口使用3.1 mutex3.2 lock3.3 try_lock3.4 unlock1 概述 互斥锁是一个可锁定的对象,用于在代码的关键部分需要独占访问时发出信号,防止具有相同保护的其他线程同时执行并访问相同的内存位置。   互斥对象提供独占所有权,不支持递归性(即,线程不…

Windows 找不到文件‘shell:sendto‘。请确定文件名是否正确后,再试一次

执行“shell:sendto”命令的时候,报错:Windows 找不到文件’shell:sendto’。请确定文件名是否正确后,再试一次 解决办法: 在桌面新建一个记事本文件命名为fix.reg,注意后缀是reg,文件中填写以下内容&…

应对转租、混租、群租,天诚人脸物联网智能门锁与公租房管理系统有一套!

“住房”关系着老百姓的切身利益和幸福指数。近年来,全国各地掀起了保障性住房建设热潮,积极有序推进智慧公租房小区打造,助力共同富裕。 一、公租房入住对象界定 公租房的受众群体各地标准不一,却也大同小异。重庆市公共租赁房…

【安装笔记-20240607-Linux-在 OpenWrt-23.05 上安装配置域名服务器】

安装笔记-系列文章目录 安装笔记-20240607-Linux-在 OpenWrt-23.05 上安装配置域名服务器 文章目录 安装笔记-系列文章目录安装笔记-20240607-Linux-在 OpenWrt-23.05 上安装配置域名服务器 前言一、软件介绍名称:Bind9主页官方介绍 二、安装步骤测试版本&#xff…

Liunx环境下redis主从集群搭建(保姆级教学)01

Linux 环境安装redis 准备一台linux虚拟机 我使用基于Linux的开源类服务器操作系统CentOS7。 打开虚拟机,输入密码登录 下载linux版本的redis安装包 已经下载redis-5.0.10.tar.gz 创建一个文件夹用来安装redis,我在/opt目录下创建redis文件夹 将下载好的redis…

Windows 更新根文件夹的修改时间

简介: Win10 系统不会根据深层目录文件更新主目录的修改时间. 一般解决办法是关闭 Winodws 搜索引擎。 win10文件夹不能自动更新了怎么办?_百度知道 本脚本通过递归遍历子目录和子文件,来更新根目录的时间。 使用内层目录和当前目录下的最新…

接口幂等性设计(5 大方案罗列)

结合案例、列举场景的接口幂等性设计方案。 方案 1. 状态机 业务场景,数据审核成功后进行短信通知,或者是订单状态变成已支付后,短信通知用户订单生成的详细信息,等等和状态有关的操作。 假设 status:0(待…

查看服务器的硬件信息、操作系统等常用命令

在Linux下查看服务器是什么类型的服务器,通常可以通过查看服务器的硬件信息、操作系统和已安装的服务来判断。以下是一些常用的命令: 查看操作系统信息: cat /etc/*release* 查看CPU信息: lscpu 查看内存信息: free…

在npm发布自己的组件包

目录 前言 正文 npm和git的对比 Node环境的配置 具体发布步骤 ※※需要注意的是 尾声 🔭 Hi,I’m Pleasure1234🌱 I’m currently learning Vue.js,SpringBoot,Computer Security and so on.👯 I’m studying in University of Nottingham Ni…

轻松掌握Java循环:break、continue和return语句全解析

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

【iOS】MRC下的单例模式批量创建单例

单例模式的介绍和ARC下的单例请见这篇:【iOS】单例模式 目录 关闭ARC环境MRC下的单例ARC下的单例批量创建单例Demo 关闭ARC环境 首先关闭ARC环境,即打开MRC: 或是指定某特定目标文件为非ARC环境: 双击某个类文件,指定…