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
你的业务场景是使用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
允许应用读取联系人数据。
可申请此权限的特殊场景与功能:
应用需要克隆、备份或同步联系人信息。
例如:
- 应用需要批量读取本机通讯录数据,并同步到云端服务器。
- 应用需要批量读取通讯录数据,在设备间进行同步或者克隆操作。
其他场景下的使用方案: 使用“联系人Picker”访问联系人数据,使用方式请参考:使用Picker选择联系人。
申请后AGC的审核时长: 预计3个工作日内反馈审核结果。
权限级别:system_basic
授权方式:用户授权(user_grant)
ohos.permission.WRITE_CONTACTS
允许应用添加、移除或更改联系人数据。
可申请此权限的特殊场景与功能:
应用需要克隆、备份或同步联系人信息。
例如:
- 应用需要把从云端服务器读取的通讯录数据批量写入到本地通讯录。
- 应用需要把从其他设备同步过来的通讯录数据批量写入通讯录。
其他场景下的使用方案: 除以上特殊场景外,应用不能修改联系人数据,应引导用户到“联系人”应用中修改联系人数据。
申请后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_CONTACTS 和 ohos.permission.WRITE_CONTACTS 权限。
权限控制基于数据敏感级别,而非具体 API。DataShareHelper 访问 Contacts.CONTENT_URI 本质是跨进程调用联系人数据提供方,该提供方会校验调用方是否已声明对应权限。无论使用 dataShare 还是 contact.* 封装接口,只要操作联系人数据,读写权限都不可或缺。

