鸿蒙应用开发--封装鉴权工具类以及如何使用
·
import { abilityAccessCtrl, bundleManager, Permissions } from '@kit.AbilityKit'
class PermissionPlugin {
// 检查单个权限
checkAccessToken(permission: Permissions) {
try {
const atManager = abilityAccessCtrl.createAtManager();
const bundleInfo =
bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
const accessTokenId = bundleInfo.appInfo.accessTokenId
const grantStatus = atManager.checkAccessTokenSync(accessTokenId, permission);
return grantStatus;
} catch (e) {
return abilityAccessCtrl.GrantStatus.PERMISSION_DENIED
}
}
// 检查多个权限
async checkPermissions(permissions: Permissions[]) {
for (let permission of permissions) {
const grantStatus = this.checkAccessToken(permission)
if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {
return false
}
}
return true
}
// 首次向用户申请授权
async requestPermissions(permissions: Permissions[]) {
const atManager = abilityAccessCtrl.createAtManager();
const res = await atManager.requestPermissionsFromUser(getContext(), permissions) // 首次
const isAuth = res.authResults.every(item => item === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
return isAuth ? Promise.resolve() : Promise.reject()
}
// 二次向用户申请授权
async requestPermissionOnSetting(permissions: Permissions[]) {
const atManager = abilityAccessCtrl.createAtManager();
const grantStatus = await atManager.requestPermissionOnSetting(getContext(), permissions) // 二次
const isAuth = grantStatus.every(item => item === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
return isAuth ? Promise.resolve() : Promise.reject()
}
}
// 暴露实例对象
export const permissionPlugin = new PermissionPlugin()
上面是封装的鉴权工具类.可以直接使用.
鸿蒙中的权限如果是user_grant类型的,不仅需要在配置文件里面申请,还需要向用户申请,比如使用麦克风进行录音的时候.
导入鉴权工具类暴露出来的permissionPlugin实例,调用requestPermissions向用户申请权限,如果授权,则返回成功结果,否则返回失败结果.
一般这个时候进行二次申请,所以在catch里调用requestPermissionOnSetting方法进行二次授权.
如果还是拒绝,则弹框提示手动开启麦克风权限或者其他权限
aboutToAppear(): void {
async checkPermission() {
try {
const res = await permissionPlugin.requestPermissions(['ohos.permission.MICROPHONE'])
} catch (e) {
try {
await permissionPlugin.requestPermissionOnSetting(['ohos.permission.MICROPHONE'])
} catch (e) {
promptAction.showToast({
message: '如果想要体验语音搜索功能,要允许哦~ღ( ´・ᴗ・` )比心'
})
}
}
}
更多推荐

所有评论(0)