HarmonyOS Next-鸿蒙中封装权限请求
·
1. 定义一个名为Permission的类。
class Permission {
}
export const permission = new Permission()
2.类中定义一个requestPermission方法用于请求用户授权。
- 首先要拿到权限管理对象。
- 在调用它身上的requestPermissionsFromUser方法向用户申请权限。
- 权限列表要从外边传过来。
- 最后要把授权结果返回出去。
- 注意:requestPermissionsFromUser 如果用户拒绝授权,将无法再次拉起弹框,只会返回授权结果,可以发起二次授权requestPermissionOnSetting
class Permission {
// 首次申请权限
async requestPermission(permissions: Permissions[]) {
// 1. 创建权限管理对象
const atManager = abilityAccessCtrl.createAtManager()
const ctx = AppStorage.get<Context>('context')
if (ctx) {
// 2. 发起授权请求
const res = await atManager.requestPermissionsFromUser(ctx, permissions)
// 3. 判断用户是否授权
const flag = res.authResults.every(item => item === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED )
return flag
} else {
return false
}
}
}
export const permission = new Permission()
3. 类中定义一个permissionSetting方法用于二次向用户申请授权。
- 与上同理
- requestPermissionOnSetting每次都会拉起设置弹窗
import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit'
class Permission {
// 申请权限
async requestPermission(permissions: Permissions[]) {
// 1. 创建权限管理对象
const atManager = abilityAccessCtrl.createAtManager()
const ctx = AppStorage.get<Context>('context')
if (ctx) {
// 2. 申请授权
const res = await atManager.requestPermissionsFromUser(ctx, permissions)
// 3. 判断用户是否授权
const flag = res.authResults.every(item => item === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED )
return flag
} else {
return false
}
}
// 二次申请
async permissionSetting(permissions: Permissions[]) {
const atManager = abilityAccessCtrl.createAtManager()
const ctx = AppStorage.get<Context>('context')
if (ctx) {
const res = await atManager.requestPermissionOnSetting(ctx, permissions)
const flag = res.every(item => item === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
return flag
}
return false
}
}
export const permission = new Permission()

可以很灵活的去使用
permissions: Permissions[] = ['ohos.permission.MICROPHONE']
async getPermissions() {
try {
// 申请权限
const isOK1 = await permission.requestPermission(this.permissions)
if (isOK1) return
// 弹窗
const res = await promptAction.showDialog(this.confirmConfig)
if (res.index === 0) return router.back()
// 二次申请
const isOK2 = await permission.permissionSetting(this.permissions)
if (isOK2) return
router.back()
} catch (e) {
router.back()
}
}
更多推荐

所有评论(0)