HarmonyOS中的应用权限
前言
系统提供了一种允许应用访问系统资源(如:通讯录等)和系统能力(如:访问摄像头、麦克风等)的通用权限访问方式,来保护系统数据(包括用户个人数据)或功能,避免它们被不当或恶意使用。
一、如何申请应用权限
在module.json5中声明应用需要请求的权限即可,但也有需要注意的地方。
- 注意点:
(1)权限级别 normal–所有应用都能用,system_basic–要签名证书 system_core–不开放
(2)授权方式 授权方式为 user_grant(用户授权)会弹窗,而 system_grant(系统授权) 自动授权。 - 申请 user_grant 用户授权
(1)先在module.json5中声明应用需要请求的权限,且要设置需要使用的场景+使用原因
(2)检查当前是否已经授权
(3)动态向用户申请授权:调用 requestPermissionsFromUser() 方法拉起弹窗请求用户授权,
(4)处理授权结果:如果用户授权,则可以继续访问目标操作;如果用户拒绝授权,则需要提示用户必须授权才能访问当前页面的功能,并引导用户到系统应用“设置”中打开相应的权限。
二、录音权限
1.封装权限工具
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)
return result.authResults.every(result => result === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
}
return false
}
// 打开权限设置 beta3
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()
2. 在录音页面实现请求权限,无权限不可进入
// 1. 打开授权对话框
// 2.1 授权,啥也不用干
// 2.2 禁用,弹出一个对话框,提示用户授权,离开(返回上一个页面)去授权(去应用设置页面)
try {
const flag = await permission.requestPermissions(['ohos.permission.MICROPHONE'])
if (!flag) {
const dialogResult = await promptAction.showDialog({
title: '温馨提示',
message: '未授权使用麦克风将无法使用该面试录音功能,是否前往设置进行授权?',
buttons: [
{ text: '离开', color: $r('app.color.common_gray_01') },
{ text: '去授权', color: $r('app.color.black') }
],
})
if (dialogResult.index === 0) {
router.back()
} else if (dialogResult.index === 1) {
const want: Want = {
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'application_info_entry',
parameters: {
// 修改成你的应用包名,跳转到该应用的设置页面
pushParams: 'xyz.zhousg.interview_tong'
}
}
const uiContext = getContext(this) as common.UIAbilityContext
uiContext.startAbility(want)
}
}
} catch (e) {
router.back()
}
}
总结
本文主要介绍了如何请求权限,重点介绍了录音权限及权限工具类。