动态申请权限的步骤是怎样的?

动态申请权限的步骤是怎样的?

HarmonyOS
2024-08-05 18:18:49
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
噜啦噜啦嘞噜啦嘞

在 module.json5 中添加权限说明

module-requestPermissions
  {
        "name": "ohos.permission.READ_CALENDAR",
        "reason": '$string:permission_reason_calendar',//当申请的权限为
        "usedScene": {}
      },

(2)检查是否已经授权过此权限

// 检查授权结果
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((permission) => atManager.checkAccessTokenSync(tokenID, permission))
处理授权结果
  return authResults.every(v => v === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
}复制

(3)动态向用户申请授权

// 拉起弹框请求用户授权
async requestPermissions(permissions: Permissions[]) {
创建应用权限管理器
  const atManager = abilityAccessCtrl.createAtManager();
拉起弹框请求用户授权
  const grantStatus = await atManager.requestPermissionsFromUser(getContext(), permissions)
处理请求权限结果
  return grantStatus.authResults.every(v => v === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
}

(4)处理授权结果

注意:如果用户在弹窗中拒绝授权,再次调用 将没有任何反应。 需要引导用户在系统设置页中开启应用权限。

// 打开系统设置的权限管理页
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
    }
  })
}
分享
微博
QQ
微信
回复
2024-08-05 22:52:40
相关问题
动态申请权限能否添加描述
749浏览 • 1回复 待解决
如何申请设备上媒体读写权限
2402浏览 • 1回复 待解决
关于权限申请配置文件声明
1715浏览 • 1回复 待解决
如何申请组合授权权限
427浏览 • 1回复 待解决
HarmonyOS权限申请问题
424浏览 • 1回复 待解决
如何申请广告跟踪权限
437浏览 • 1回复 待解决
app如何申请位置权限
439浏览 • 1回复 待解决
InputMethodAbility用法怎样
7868浏览 • 1回复 待解决
PolarDB报警功能怎样
2593浏览 • 1回复 待解决
AppStorage 作用范围怎样
2293浏览 • 1回复 待解决
权限申请与校验,该如何处理啊?
972浏览 • 1回复 待解决
Web组件如何申请位置权限
450浏览 • 1回复 待解决
PolarDB诊断功能怎样
3069浏览 • 1回复 待解决
PolarDB监控功能怎样
3418浏览 • 1回复 待解决
HarmonyOS 申请ACL权限有无模板?
88浏览 • 1回复 待解决