写点什么

高质量 HarmonyOS 权限管控流程

作者:万少
  • 2024-12-15
    天津
  • 本文字数:2551 字

    阅读完需:约 8 分钟

高质量 HarmonyOS 权限管控流程

高质量 HarmonyOS 权限管控流程

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

权限管控了什么

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


  • 数据包括个人数据(如照片、通讯录、日历、位置等)、设备数据(如设备标识、相机、麦克风等)。

  • 功能包括设备功能(如访问摄像头/麦克风、打电话、联网等)、应用功能(如弹出悬浮窗、创建快捷方式等)。

权限组和子权限

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


  • 读取媒体相册是子权限、写入媒体相册是子权限

  • 它们合起来就是一个权限组。


权限组和子权限一览

链接


位置信息;ohos.permission.LOCATION_IN_BACKGROUND;
ohos.permission.LOCATION;
ohos.permission.APPROXIMATELY_LOCATION;
相机;ohos.permission.CAMERA;麦克风;ohos.permission.MICROPHONE;通讯录;ohos.permission.READ_CONTACTS;
ohos.permission.WRITE_CONTACTS;
日历;ohos.permission.READ_CALENDAR;
ohos.permission.WRITE_CALENDAR;
ohos.permission.READ_WHOLE_CALENDAR;
ohos.permission.WRITE_WHOLE_CALENDAR;
健身运动;ohos.permission.ACTIVITY_MOTION;身体传感器;ohos.permission.READ_HEALTH_DATA;图片和视频;ohos.permission.WRITE_IMAGEVIDEO;
ohos.permission.READ_IMAGEVIDEO;
ohos.permission.MEDIA_LOCATION;
音乐和音频;ohos.permission.WRITE_AUDIO;
ohos.permission.READ_AUDIO;
文件;ohos.permission.READ_DOCUMENT;
ohos.permission.WRITE_DOCUMENT;
ohos.permission.READ_MEDIA;
ohos.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_CALL;
ohos.permission.MANAGE_VOICEMAIL;
通话记录;ohos.permission.READ_CALL_LOG;
ohos.permission.WRITE_CALL_LOG;
信息;ohos.permission.READ_CELL_MESSAGES;
ohos.permission.READ_MESSAGES;
ohos.permission.RECEIVE_MMS;
ohos.permission.RECEIVE_SMS;
ohos.permission.RECEIVE_WAP_MESSAGES;
ohos.permission.SEND_MESSAGES;
剪切板;ohos.permission.READ_PASTEBOARD;文件夹;ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY;
ohos.permission.READ_WRITE_DESKTOP_DIRECTORY;
ohos.permission.READ_WRITE_DOCUMENTS_DIRECTORY;
复制代码

APL 等级

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

应用 APL 等级

应用 APL 等级分为三级:


权限 APL 等级

权限 APL 等级也分为三级:


访问控制列表(ACL)

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


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


授权方式

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


  1. system_grant(系统授权)

  2. 应用被允许访问的数据不会涉及到用户或设备的敏感信息

  3. 需要在安装包中申请 system_grant 权限,那么系统会在用户安装应用时,自动把相应权限授予给应用

  4. user_grant(用户授权)

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

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


申请应用权限流程

一图胜万言

总流程图



normal 等级的应用申请权限

system_basic 等级的应用申请权限

申请应用权限操作步骤

1.声明权限-必须

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

  2. 配置内容


2.声明 ACL 权限-非必须

参考链接


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)); });
复制代码




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


4.访问接口-必须

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

5. 当用户拒绝时,二次申请权限

针对以上弹窗,如果用户点击了禁止,我们可以再次弹窗询问用户,如 “不授予权则无法继续使用功能”,“禁止”,“允许”。


此时,如果用户点击了允许


  1. 使用 requestPermissionOnSetting 在应用内直接弹窗 请求授权

  2. 使用 startAbility 跳转到系统权限设置页面,重新授权权限`

附上述流程思维导图





发布于: 刚刚阅读数: 4
用户头像

万少

关注

还未添加个人签名 2021-12-02 加入

还未添加个人简介

评论

发布
暂无评论
高质量 HarmonyOS 权限管控流程_鸿蒙_万少_InfoQ写作社区