鸿蒙 HarmonyOS 权限管理的封装

// 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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值