HarmonyOS鸿蒙Next中应用权限校验、授权工具封装
HarmonyOS鸿蒙Next中应用权限校验、授权工具封装
1.检查是否授权
import { abilityAccessCtrl, bundleManager, common, Permissions } from '@kit.AbilityKit';
/**
* 检查是否授权
* @param permissions
*/
checkPermissions(permissions: Permissions[]) {
// 1. 创建应用权限管理器
const atManager = abilityAccessCtrl.createAtManager();
// 2. 获取 bundle 包信息
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
// 3. 提取 tokenID 应用唯一标识
const tokenID = bundleInfo.appInfo.accessTokenId;
// 检查权限或者权限组授权结果
const authResult = permissions.map(item => atManager.checkAccessTokenSync(tokenID, item))
// 检查每一项是否都授权
return authResult.every(v => v === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
}
2.动态申请权限(首次弹窗申请)
/**
* 动态申请权限(首次弹窗申请)
* @param permissions
*/
async requestPermissions(permissions: Permissions[]) {
// 程序访问控制管理
const atManager = abilityAccessCtrl.createAtManager();
// 拉起弹框请求用户授权
const grantStatus = await atManager.requestPermissionsFromUser(getContext(), permissions)
// 获取请求权限的结果
const isAuth = grantStatus.authResults.every(v => v === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
// 返回Promise结果
return isAuth ? Promise.resolve(true) : Promise.reject(false)
}
1.打开系统设置的权限管理页
/**
* 打开系统设置的权限管理页(处理授权结果)
*/
openPermissionSettingsPage() {
const context = getContext() as common.UIAbilityContext
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
// 跳转系统设置页
context.startAbility({
bundleName: 'com.huawei.hmos.settings', // 固定写法CV:设置页的包名
abilityName: 'com.huawei.hmos.settings.MainAbility', // 固定写法CV:设置页的 ability 名
uri: 'application_info_entry', // 固定写法CV:打开 设置->应用和元服务
parameters: {
// 按照包名打开对应设置页
pushParams: bundleInfo.name
}
})
}
更多关于HarmonyOS鸿蒙Next中应用权限校验、授权工具封装的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
在HarmonyOS Next中,应用权限校验和授权工具封装可以使用@ohos.abilityAccessCtrl
模块实现。权限校验通过atManager.verifyAccessToken()
同步检查当前应用是否具备指定权限,返回PERMISSION_GRANTED
或PERMISSION_DENIED
。动态授权需调用requestPermissionsFromUser()
异步申请,结果通过回调返回。工具类封装示例:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
class PermissionUtil {
static checkPermission(permission: string): boolean {
const atManager = abilityAccessCtrl.createAtManager();
return atManager.verifyAccessToken(abilityAccessCtrl.AccessTokenID.BASE, permission) === 0;
}
}
注意:需先在module.json5
中声明需要的权限。
更多关于HarmonyOS鸿蒙Next中应用权限校验、授权工具封装的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中,您提供的权限管理封装代码是正确且完整的实现方案。以下是对代码的几点技术分析:
- 权限检查部分:
- 使用createAtManager()创建权限管理器实例
- 通过getBundleInfoForSelfSync获取当前应用信息
- 使用checkAccessTokenSync同步检查权限状态
- 正确判断了PERMISSION_GRANTED状态
- 动态申请权限部分:
- 规范使用了requestPermissionsFromUser异步API
- 正确处理了授权结果数组
- 返回Promise便于链式调用
- 系统设置跳转部分:
- 正确使用了Settings应用的固定包名和Ability名
- 通过parameters传递当前包名实现精准跳转
建议可以进一步封装成工具类,加入以下优化:
- 增加权限类型校验
- 添加失败回调处理
- 记录权限请求日志
- 实现权限使用说明的自动展示
这些代码可以直接用于生产环境,符合HarmonyOS的权限管理规范。