赞
踩
在 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(Ability Privilege Level,元能力权限等级)等级,分为两类。一类是应用APL等级、另一类是权限APL等级。说人话就是 不管官阶的士官和其对应的权限之间的关系。
应用APL等级分为三级:
APL级别 | 说明 |
---|---|
normal | 默认情况下,应用的APL等级都为normal等级。 |
system_basic | 该等级的应用服务提供系统基础服务。 |
system_core | 该等级的应用服务提供操作系统核心能力。 应用APL等级不允许配置为system_core。 |
权限APL等级也分为三级:
APL级别 | 说明 | 开放范围 |
---|---|---|
normal | 允许应用访问超出默认规则外的普通系统资源,如配置Wi-Fi信息、调用相机拍摄等。 这些系统资源的开放(包括数据和功能)对用户隐私以及其他应用带来的风险低。 | APL等级为normal及以上的应用。 |
system_basic | 允许应用访问操作系统基础服务(系统提供或者预置的基础功能)相关的资源,如系统设置、身份认证等。 这些系统资源的开放对用户隐私以及其他应用带来的风险较高。 | APL等级为system_basic及以上的应用。 |
system_core | 涉及开放操作系统核心资源的访问操作。这部分系统资源是系统最核心的底层服务,如果遭受破坏,操作系统将无法正常运行。 | - APL等级为system_core的应用。 - 仅对系统应用开放。 |
权限等级和应用APL等级是一一对应的。原则上,拥有低APL等级的应用默认无法申请更高等级的权限。访问控制列表ACL(Access Control List)提供了解决低等级应用访问高等级权限问题的特殊渠道。我们可以将ACL理解为让普通的老百姓也具有某种士官的能力,如调兵遣将。
需要注意的是,并不是所有的权限都能通过申请ACL来实现跨等级的应用来获得。具体哪些权限可以被跨等级申请使用。HarmonyOS中也有明确标识的。如: 链接
不管是什么的方式申请权限,最后在用户的体验上一共分为两种。 system_grant(系统授权) 和 user_grant(用户授权)
system_grant(系统授权)
user_grant(用户授权)
会弹出窗口询问用户的意见-应用被允许访问的数据将会涉及到用户或设备的敏感信息
需要注意的是,如果用户增加拒绝过授权,那么只能通过引导用户到系统设置页面来手动打开权限
一图胜万言
在 main/module.json5 中 配置 requestPermissions 字段声明权限
配置内容
如果你申请的权限类型是 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));
});
此图只做演示,不和上述代码具体效果一一对应
此时,就可以直接调用相关接口,实现业务功能
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。