当前位置: 首页 > news >正文

【HarmonyOS】获取通讯录信息

【HarmonyOS】获取通讯录信息

一、问题背景:
在Android和IOS中,获取手机通讯录信息的方式,一般是申请通讯录权限后,获得手机所有的通讯录列表信息。

在鸿蒙中,因为权限方式安全性提高的变更:将用户权限限制,不让App应用随意获取到所有的信息,只能根据用户选择后,根据用户选择的范围,传送给App。而不是App直接获取到所有的源信息。

例如,相册图片和视频的获取,都是跳到系统的组件中选择,不会将所有图片和视频访问开放给APP,进行自定义相册来展示了。这样对用户信息来说,安全层面会提升很多。

之前谣言腾x,被传偷偷上传用户的相册,也是因为权限被开放给应用了,会有这方面的技术可行性。而现在华为的这种崭新的权限提供方式,给了用户极大的安全。对应用来说,也避免了很多风险,也提升了应用开发的效率。

在鸿蒙中通讯录的信息获取,也是需要先调用华为提供的通讯录选择组件,让用户主动从通讯录中选择需要传给APP的通讯录联系人,勾选确认之后传给APP。

值得注意的是,华为提供的这种授权方式,应用APP是不需要单独申请权限的,因为我们是通过华为的安全组件,让用户主动确认勾选,将信息传给APP的,所以省略了用户再授权的过程。因为这个过程本身就代表了用户的授权。

二、解决方案:

import { contact } from '@kit.ContactsKit';
import { BusinessError } from '@kit.BasicServicesKit';/**** 通讯录获取页面*/


struct ContactPage {private TAG: string = "ContactPage";onClickContacts = ()=>{// 选择联系人时的筛选条件 (是否多选)let contactSelectionOptions: contact.ContactSelectionOptions = { isMultiSelect:false };// 调用唤起通讯录选择组件,让用户去选择需要传入给APP的通讯录联系人let promise = contact.selectContacts(contactSelectionOptions);// 异步获取promise.then((data) => {// 用户选择确认之后,会在此处收到回调。console.log(this.TAG, `selectContacts success: data->${JSON.stringify(data)}`);// Array<Contact> ,返回选择的联系人对象数组。let contactList: Array<contact.Contact> = new Array<contact.Contact>();if(contactList && contactList.length > 0){let info: contact.Contact = contactList[0];let id = info.id; // 通讯录用户的唯一标识}}).catch((err: BusinessError) => {console.error(this.TAG, `selectContacts fail: err->${JSON.stringify(err)}`);});}build() {Row(){Button('点击获取通讯录信息').onClick(this.onClickContacts)}.justifyContent(FlexAlign.Center).size({width: "100%",height: "100%"})}
}

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • hudi数据湖万字全方位教程+应用示例
  • 14-47 剑和诗人21 - 2024年如何打造AI创业公司
  • google Guava组件实现原理和Java使用场景【主要是本地缓存Cache】
  • 如何理解Node.js?NPM?Yarn?Vue?React?
  • mybatis动态传入参数 pgsql 日期 Interval ,day,minute
  • FastGPT+OneAI接入网络模型
  • python调用阿里云汇率接口
  • 开放式耳机哪款性价比高?这五款超值精品不容错过
  • YOLOv5改进 | 注意力机制| 对小目标友好的BiFormer【CVPR2023】
  • 数据分析:小红书户外风潮起,内容种草新密码
  • mybatis插件开发
  • 【Scrapy】 Scrapy 爬虫框架
  • TCP协议的三次握手和四次挥手(面试)
  • 【ARMv8/v9 GIC- 700 系列 1 -- Programmers model for GIC-700】
  • 除自身以外数组的乘积_前缀和
  • JavaScript-如何实现克隆(clone)函数
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 0x05 Python数据分析,Anaconda八斩刀
  • classpath对获取配置文件的影响
  • git 常用命令
  • 百度小程序遇到的问题
  • 闭包--闭包作用之保存(一)
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 从0实现一个tiny react(三)生命周期
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 分享几个不错的工具
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 简单实现一个textarea自适应高度
  • 聊聊flink的TableFactory
  • 小而合理的前端理论:rscss和rsjs
  • nb
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #HarmonyOS:Web组件的使用
  • #单片机(TB6600驱动42步进电机)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (10)STL算法之搜索(二) 二分查找
  • (70min)字节暑假实习二面(已挂)
  • (arch)linux 转换文件编码格式
  • (day6) 319. 灯泡开关
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (简单) HDU 2612 Find a way,BFS。
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (学习总结16)C++模版2
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Core 中的路径问题
  • .Net 中Partitioner static与dynamic的性能对比
  • /dev下添加设备节点的方法步骤(通过device_create)