HarmonyOS 鸿蒙Next关于权限问题

HarmonyOS 鸿蒙Next关于权限问题 一个代码中使用的是通过 dataShare.createDataShareHelper(… Contacts.CONTENT_URI) 后调用 DAHelper.query/insert/update/delete 操作联系人数据,但官方文档里是 contact.queryContact/addContact/updateContact/deleteContact 这类 contact.* API,不是 DataShareHelper API,这种情况也必须申请

ohos.permission.READ_CONTACTS和ohos.permission.WRITE_CONTACTS这两个权限吗


更多关于HarmonyOS 鸿蒙Next关于权限问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

你的业务场景是使用ArkData(数据服务)的dataShare.DataShareHelper来实现同设备不同应用的数据共享吗? 如果没有涉及调用Contacts Kit(联系人服务)是不需要申请受限开放权限ohos.permission.READ_CONTACTS或ohos.permission.WRITE_CONTACTS的。 shift+Ctrl<command>+F全工程搜下ContactsKit,确认下其他地方有没有调用相关API。

更多关于HarmonyOS 鸿蒙Next关于权限问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你用的 API:DataShareHelper + Contacts.CONTENT_URI这是底层通用数据共享接口,直接访问系统联系人的 ContentProvider 数据。

本质:直接读写系统联系人数据库

安全限制:系统强制要求权限,无权限直接抛安全异常

官方文档 API:contact.queryContact() 等,这是官方封装的上层工具类。

本质:底层还是调用 DataShare 实现

安全限制:一样会校验权限,只是封装得更简单

一句话来说,上层 API = 底层 DataShare 包装而来,而校验是系统层面的,和你用哪种调用方式无关的

你好,这两个权限都有:

ohos.permission.READ_CONTACTS

允许应用读取联系人数据。

可申请此权限的特殊场景与功能:

应用需要克隆、备份或同步联系人信息。

例如:

  1. 应用需要批量读取本机通讯录数据,并同步到云端服务器。
  2. 应用需要批量读取通讯录数据,在设备间进行同步或者克隆操作。

其他场景下的使用方案: 使用“联系人Picker”访问联系人数据,使用方式请参考:使用Picker选择联系人

申请后AGC的审核时长: 预计3个工作日内反馈审核结果。

权限级别:system_basic

授权方式:用户授权(user_grant)

ohos.permission.WRITE_CONTACTS

允许应用添加、移除或更改联系人数据。

可申请此权限的特殊场景与功能:

应用需要克隆、备份或同步联系人信息。

例如:

  1. 应用需要把从云端服务器读取的通讯录数据批量写入到本地通讯录。
  2. 应用需要把从其他设备同步过来的通讯录数据批量写入通讯录。

其他场景下的使用方案: 除以上特殊场景外,应用不能修改联系人数据,应引导用户到“联系人”应用中修改联系人数据。

申请后AGC的审核时长: 预计3个工作日内反馈审核结果。

权限级别:system_basic

授权方式:用户授权(user_grant)

建议按“访问的数据对象”而不是只按“调用的 API 名称”来判断权限。虽然你看到的代码走的是 dataShare.createDataShareHelper + Contacts.CONTENT_URI,不是 contact.queryContact/addContact 这类封装 API,但它访问的仍然是联系人数据提供方,读写联系人数据通常仍需要对应的 READ_CONTACTS / WRITE_CONTACTS 权限。

可以这样拆:只查询联系人信息,需要声明并动态申请 ohos.permission.READ_CONTACTS;涉及 insert/update/delete,则还需要 ohos.permission.WRITE_CONTACTS。DataShareHelper 只是访问通道,不会绕过联系人数据本身的权限校验;如果没有对应权限,通常会在 query/insert/update/delete 时被系统拦截或返回权限类错误。

另外要注意这些是敏感权限,除了 module.json5 声明外,还需要按运行时权限流程在用户同意后再访问,并在隐私政策/权限说明里解释用途。不要为了调通代码去申请超出业务范围的联系人权限。

同问。

鸿蒙Next采用细粒度权限模型,分为基础、敏感和特殊权限三类。应用需在module.json5中声明所需权限,并在运行时通过requestPermissionsFromUser接口动态申请敏感权限。系统会弹出授权弹窗,用户可选择允许、禁止或仅在使用中允许。特殊权限(如安装其他应用)需跳转系统设置中手动授予。

是的,仍然需要申请 ohos.permission.READ_CONTACTSohos.permission.WRITE_CONTACTS 权限。

权限控制基于数据敏感级别,而非具体 API。DataShareHelper 访问 Contacts.CONTENT_URI 本质是跨进程调用联系人数据提供方,该提供方会校验调用方是否已声明对应权限。无论使用 dataShare 还是 contact.* 封装接口,只要操作联系人数据,读写权限都不可或缺。

回到顶部