HarmonyOS 鸿蒙Next 获取拒绝的权限

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 获取拒绝的权限

用户获取相册权限时,点击拒绝后,用户再次点击怎么获取当前权限的状态 现在就是用以下方法实现,但是用户拒绝后,再次点击上传没有反应  

private async openGallery() {
let context = getContext(this) as common.UIAbilityContext;
let atManager = abilityAccessCtrl.createAtManager();
let info = await bundleManager.getBundleInfoForSelf(0);
LogUtil.error(this.TAG, '用户权限信息: ', JSON.stringify(info))
if (info && info.appInfo) {
let result = atManager.verifyAccessTokenSync(info.appInfo.accessTokenId, “ohos.permission.READ_MEDIA”);
if (abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED == result) {
console.log(“has permission”)
}
} else {
atManager.requestPermissionsFromUser(context, [“ohos.permission.READ_MEDIA”], (error, result) => {
if (result) {
console.log("result: " + JSON.stringify(result));
if (result.authResults[0] == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
// 用户授予权限
// 打开相册
this.openGalleryInternal();
} else {
// 用户拒绝权限
LogUtil.error(this.TAG, ‘用户拒绝授权’)
}
} else {
LogUtil.error(this.TAG, ‘请求异常-’, JSON.stringify(error))
}
});
}
}

2 回复

有两种方式 一种是 需要用户在系统应用“设置”的界面中 手动授予权限

在“设置”应用中的路径:

路径一:设置 > 隐私和安全 > 位置信息 > 具体应用

路径二:设置 > 应用和元服务 > 某个应用

应用也可以通过以下方式 直接拉起“设置” 打开指定应用的详情页面 引导用户授予权限

import Want from '@ohos.app.ability.Want';
import common from '@ohos.app.ability.common';
import { BusinessError } from '@ohos.base';
// 使用UIExtensionAbility:将common.UIAbilityContext 替换为common.UIExtensionContext
function openPermissionsInSystemSettings(context: common.UIAbilityContext): void {
  let wantInfo: Want = {
    bundleName: 'com.huawei.hmos.settings',
    abilityName: 'com.huawei.hmos.settings.MainAbility',
    uri: 'application_info_entry',
    parameters: {
      pushParams: 'com.example.myapplication' // 打开指定应用的详情页面
    }
  }
  context.startAbility(wantInfo).then(() => {
    // ...
  }).catch((err: BusinessError) => {
    // ...
  })
}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

详情可参考指南链接: 【 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/request-user-authorization-second-V5

约束与限制

每次执行需要目标权限的操作时,应用都必须检查自己是否已经具有该权限。

如需检查用户是否已向您的应用授予特定权限,可以使用checkAccessToken()函数,此方法会返回PERMISSION_GRANTED或PERMISSION_DENIED。具体示例可参考下文。

每次访问受目标权限保护的接口之前,都需要使用requestPermissionsFromUser()接口请求相应的权限。

用户可能在动态授予权限后通过系统设置来取消应用的权限,因此不能将之前授予的授权状态持久化。

user_grant权限授权要基于用户可知可控的原则,需要应用在运行时主动调用系统动态申请权限的接口,系统弹框由用户授权,用户结合应用运行场景的上下文,识别出应用申请相应敏感权限的合理性,从而做出正确的选择。

系统不鼓励频繁弹窗打扰用户,如果用户拒绝授权,将无法再次拉起弹窗,需要应用引导用户在系统应用“设置”的界面中手动授予权限。

相关参考指南链接: 【 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/request-user-authorization-V5

在HarmonyOS(鸿蒙)系统中,若应用程序尝试获取被拒绝的权限,通常意味着该应用尚未在用户的设备上获得必要的授权。这种情况一般发生在应用尝试访问用户的敏感数据或执行需要特定权限的操作时。以下是一些可能的解决方案,但鉴于要求不给出建议,我将直接说明一些关键点和操作步骤的概述:

  1. 检查权限声明:确保你的应用在manifest.json文件中已正确声明了所需的权限。

  2. 动态请求权限:对于运行时权限,应用需要在运行时向用户请求权限,而不是仅在安装时声明。这通常涉及调用系统的权限请求API。

  3. 用户授权管理:用户可以在设备的设置中查看和管理应用的权限。如果应用被拒绝了某个权限,用户可以在此处手动开启。

  4. 系统策略:某些权限可能受到系统策略的限制,例如基于用户隐私保护或设备安全性的考虑。

  5. 应用兼容性:确保你的应用与当前鸿蒙系统版本兼容,因为不同版本的系统可能对权限管理有不同的要求。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。这将帮助你获得更专业的技术支持和解决方案。

回到顶部