应用权限-录音
应用权限
-
系统提供了一种允许应用访问系统资源(如:通讯录等)和系统能力(如:访问摄像头、麦克风等)的通用权限访问方式,来保护系统数据(包括用户个人数据)或功能,避免它们被不当或恶意使用
-
应用申请敏感权限时,必须填写权限使用理由字段,敏感权限通常是指与用户隐私密切相关的权限,包括地理位置、相机、麦克风、日历、健身运动、身体传感器、音乐、文件、图片视频等权限。参考向用户申请授权。
-
分类
- system_grant
- 在配置文件中,声明应用需要请求的权限后,系统会在安装应用时自动为其进行权限预授予,开发者不需要做其他操作即可使用权限。
- user_grant
- 在配置文件中,声明应用需要请求的权限,且要设置需要使用的场景+使用原因
- 调用 requestPermissionsFromUser() 方法后,应用程序将等待用户授权的结果。如果用户授权,则可以继续访问目标操作。如果用户拒绝授权,则需要提示用户必须授权才能访问当前页面的功能,并引导用户到系统应用“设置”中打开相应的权限。可参考二次向用户申请权限 requestPermissionOnSetting() 。
- 对所有应用开放权限列表
- system_grant
权限配置
-
module.json5配置
"requestPermissions": [ { "name": "ohos.permission.INTERNET" }, { // 权限名称 "name": "ohos.permission.MICROPHONE", // 使用场景 "usedScene": {}, // 原因 "reason": "$string:reason_microphone" } ],
- 配置reason资源:“$string:reason_microphone”
-
图片示例
-
具体实现
封装权限工具,提供请求用户权限,拉起用户权限设置的能力
import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit';
class Permission {
// 请求用户授权
async requestPermissions(permissions: Permissions[]) {
// 创建权限管理对象
const atManager = abilityAccessCtrl.createAtManager()
// 获取上下文对象
const ctx = AppStorage.get<Context>('context')
// 上下文对象存在
if (ctx) {
// 弹框授权窗口
const result = await atManager.requestPermissionsFromUser(ctx, permissions)
// 返回授权结果
// abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED 已经授权
return result.authResults.every(result => result == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
}
// 没有授权成功
return false
}
// 二次授权弹框
async openPermissionSetting(permissions: Permissions[]) {
// 创建权限管理对象
const atManager = abilityAccessCtrl.createAtManager()
// 获取上下文对象
const ctx = AppStorage.get<Context>('context')
// 上下文对象存在
if (ctx) {
// 创建二次授权对象窗口
const authResults = await atManager.requestPermissionOnSetting(ctx, permissions)
// 返回授权结果
return authResults.every(result => result === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
}
return false
}
}
export const permission = new Permission()
使用权限工具
async aboutToAppear() {
// 创建授权对象窗口
const flag = await permission.requestPermissions(['ohos.permission.MICROPHONE'])
if(!flag){
// 创建二次授权对象窗口
permission.openPermissionSetting(['ohos.permission.MICROPHONE'])
}
}