第一步:在module.json5中配置对应权限(这里以麦克风权限为例)
1.必须配置对应的授权信息
名称:"name": "ohos.permission.MICROPHONE",
使用场景(可以为空):"usedScene": {},
使用原因:"reason": "$string:reason_microphone"
第二步:写一个申请授权的类方法
1.创建一个获取访问控制模块的实例。
const atManager = abilityAccessCtrl.createAtManager()
2.调用实例对象
const result = await atManager.requestPermissionsFromUser(ctx, permissions)
上下文获取方法(非UI页面)const ctx = AppStorage.get<Context>('context')
传入上下文和权限数组(因为可能会向用户一次性申请多个权限)
3.调用result 对象,检查授权结果result.authResults是否授权成功
4.最后记得导出实例
二次授权需调用(requestPermissionOnSetting) API
具体代码如下:
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)
// AlertDialog.show({ message: JSON.stringify(result, null, 2)})
return result.authResults.every(res => res === 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(res => res === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
}
return false
}
}
export const permission = new Permission()
在需要授权的页面直接调用此方法,能轻松实现向用户申请授权和二次授权。