// ArkTS
import { abilityAccessCtrl, bundleManager, common, Permissions, Want } from '@kit.AbilityKit';
class PermissionManager {
// permissions 是系统权限名称的字符串数组
// 检查是否授权
checkPermissions(permissions: Permissions[]) {
// 程序访问控制管理
const atManager = abilityAccessCtrl.createAtManager();
// 获取 bundle 信息
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
// 提取 tokenID 标识
const tokenID = bundleInfo.appInfo.accessTokenId
// 校验应用是否被授予权限
const authResults = permissions.map((item) => atManager.checkAccessTokenSync(tokenID, item))
// 返回是否已授权结果
return authResults.every(v => v === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
}
// 动态申请授权(首次弹窗申请)
async requestPermissions(permissions: Permissions[]) {
// 程序访问控制管理
const atManager = abilityAccessCtrl.createAtManager();
// 拉起弹框请求用户授权
const grantStatus = await atManager.requestPermissionsFromUser(getContext(this), permissions)
// 获取请求权限的结果
const isAuth = grantStatus.authResults.every(item => item === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
// 返回授权结果
return isAuth
}
// 二次弹窗打开权限设置
async openPermissionSetting(permissions: Permissions[]) {
// 程序访问控制管理
const atManager = abilityAccessCtrl.createAtManager()
// const ctx = AppStorage.get<Context>('context')!
// 拉起弹框请求用户授权
const authResults = await atManager.requestPermissionOnSetting((getContext(this) as common.UIAbilityContext), permissions)
return authResults.every(result => result === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
}
// 跳转系统设置页面打开系统设置的权限管理页(处理授权结果),第一种
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',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'application_info_entry',
parameters: {
// 按照包名打开对应设置页
pushParams: bundleInfo.name
}
})
}
//跳到系统设置界面,第二种:利用want传参
want(pushParams:string) {
let want:Want = {
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'application_info_entry',
parameters: {
// pushParams:'com.FPHao.interview_MST'
pushParams: pushParams
}
}
// 获取UIAbility上下文
let ctx = AppStorage.get<Context>('context') as common.UIAbilityContext
// 打开系统设置页
ctx.startAbility(want)
}
}
export const permissionManager = new PermissionManager()
鸿蒙 HarmonyOS 权限管理的封装
于 2024-09-18 21:39:49 首次发布