HarmonyOS鸿蒙Next中调用系统API返回“权限被拒绝”的错误,应如何申请和处理权限?

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

HarmonyOS鸿蒙Next中调用系统API返回“权限被拒绝”的错误,应如何申请和处理权限? 尝试访问用户的联系人信息时,被系统拒绝。

3 回复
ohos.permission.READ_CONTACTS
允许应用读取联系人数据。
可申请此权限的特殊场景与功能:应用需要克隆、备份或同步联系人信息。
其他场景下的使用方案: 使用“联系人Picker”访问联系人数据,使用方式请参考:选择联系人。
推荐您使用`selectContacts`接口。此接口不需要权限
参考链接:[https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/contacts-intro-V5#](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/contacts-intro-V5#)
选择联系人
参考链接:[https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-contact-V5#contactselectcontactdeprecated7](https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-contact-V5#contactselectcontactdeprecated7)
因权限收缩,涉及权限的接口您可能无法使用,推荐您使用 Picker 。相关代替接口在进行完善。在后续的版本中会持续更新。
约束与限制:[https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/contacts-intro-V5#](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/contacts-intro-V5#)约束与限制
读取联系人需要声明接口调用的权限:ohos.permission.READ_CONTACTS,此权限级别为system_basic
添加联系人、删除联系人、更新联系人需要声明接口调用的权限:ohos.permission.WRITE_CONTACTS,此权限级别为system_basic

更多关于HarmonyOS鸿蒙Next中调用系统API返回“权限被拒绝”的错误,应如何申请和处理权限?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,调用系统API返回“权限被拒绝”的错误时,需通过权限申请流程来处理。首先,在config.json文件中声明所需的权限,例如:

{
  "module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.READ_CONTACTS",
        "reason": "读取联系人信息"
      }
    ]
  }
}

然后,在代码中使用requestPermissionsFromUser方法动态申请权限:

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

async function requestPermission() {
  let atManager = abilityAccessCtrl.createAtManager();
  try {
    await atManager.requestPermissionsFromUser(this.context, ['ohos.permission.READ_CONTACTS']);
  } catch (err) {
    console.error(`权限申请失败: ${err.code}, ${err.message}`);
  }
}

如果用户拒绝权限申请,可以在onRequestPermissionsFromUserResult中处理拒绝逻辑:

onRequestPermissionsFromUserResult(requestCode: number, permissions: Array<string>, grantResults: Array<number>) {
  if (grantResults.length > 0 && grantResults[0] === 0) {
    console.log('权限已授予');
  } else {
    console.log('权限被拒绝');
  }
}

确保在应用启动时或需要调用相关API前完成权限申请,以避免“权限被拒绝”的错误。

在HarmonyOS鸿蒙Next中,调用系统API时若返回“权限被拒绝”,需按以下步骤处理:

  1. 声明权限:在module.json5文件中,明确声明所需权限。

    "requestPermissions": [
      {
        "name": "ohos.permission.权限名称"
      }
    ]
  2. 动态申请权限:在代码中,使用requestPermissionsFromUser方法动态申请权限。

    import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
    
    let atManager = abilityAccessCtrl.createAtManager();
    atManager.requestPermissionsFromUser(this.context, ['ohos.permission.权限名称'])
      .then((data) => {
        if (data.authResults[0] === 0) {
          // 权限申请成功
        } else {
          // 权限申请失败
        }
      })
      .catch((err) => {
        console.error(`Failed to request permissions. Code is ${err.code}, message is ${err.message}`);
      });
  3. 处理权限结果:根据权限申请结果,执行相应操作。

  4. 权限检查:在调用API前,使用checkAccessToken方法检查权限状态。

    let tokenInfo = atManager.verifyAccessTokenSync(this.context.tokenId, 'ohos.permission.权限名称');
    if (tokenInfo.granted) {
      // 权限已授予
    } else {
      // 未授予权限
    }
  5. 权限拒绝处理:若权限被拒绝,提示用户并引导其手动开启权限。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!