【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%"})}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【八股系列】CSS盒模型:掌握网页布局的核心

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【Vue中的&#xff1c;keep-alive&#xff1e;组件&#xff1a;深入解析与实践指南】 &#x1f3a0; 系列专栏&#xff1a;【面试题-八股系列】 &#x1f496; 感谢大家点赞&…

爬虫管理解决方案:让数据收集变得高效且合规

一、为何数据收集的效率与合规性同等重要&#xff1f; 随着大数据技术的飞速发展&#xff0c;数据收集已成为企业决策与市场洞察的核心驱动力。然而&#xff0c;在信息海洋中精准捕捞的同时&#xff0c;如何确保这一过程既高效又不触碰法律的红线&#xff0c;是每个数据实践者…

深入探讨 Google 竞价:开启海外市场的神秘钥匙与潜在风险

在这个充满挑战与机遇的数字化时代&#xff0c;Google竞价犹如开启神秘宝藏的一把钥匙&#xff0c;引领众多企业走向海外市场的康庄大道。身为数字营销领域的资深人士&#xff0c;我对Google竞价的独特魅力及潜在风险有着深刻理解。今日&#xff0c;我将带领大家深入探讨这一既…

华为OJ平台

华为OJ是一个在线编程平台&#xff0c;用于支持**华为公司的软件开发岗位招聘流程&#xff0c;考察候选人在算法设计、编程和调试等方面的技能水平**。以下是有关它的介绍&#xff1a; 1. **平台功能** - **多语言支持**&#xff1a;华为OJ平台支持多种编程语言&#xff0c;包括…

[C++]封装

一、封装的定义 封装是面向对象编程&#xff08;OOP&#xff09;的三大基本特性之一&#xff08;封装、继承、多态&#xff09;。它指的是将数据&#xff08;属性&#xff09;和操作这些数据的方法&#xff08;函数&#xff09;结合成一个独立的单元&#xff08;类&#xff09…

Perl 基础语法精讲:变量、操作符与控制结构

Perl 基础语法精讲&#xff1a;变量、操作符与控制结构 第1节&#xff1a;Perl 语法基础 1.1 Perl 语法的基本概念 Perl 是一种解释型的高级脚本语言&#xff0c;广泛用于文本处理、系统管理任务等。 1.2 语法结构和编码风格 使用 # 注释代码。遵循良好的编码风格&#xf…

使用嵌入式知识打造智能手环:nRF52蓝牙开发实战(C++/BLE/传感器)

项目概述 现代人越来越注重健康管理&#xff0c;智能穿戴设备应运而生。本项目旨在利用低功耗蓝牙芯片nRF52832&#xff0c;结合加速度计、心率传感器、陀螺仪等传感器&#xff0c;开发一款功能完善、性能稳定的智能运动手环。该手环能够实时采集用户的运动数据和生理指标&…

用MATLAB绘制三向应力圆

% 定义主应力值 sigma1 100; % MPa sigma2 50; % MPa sigma3 -33; % MPa sigma_m1(sigma1 sigma3)/2; sigma_m2(sigma1 sigma2)/2; sigma_m3(sigma2 sigma3)/2; % 计算半径 r1 (sigma1 - sigma3) / 2; r2 (sigma1 - sigma2) / 2; r3 (sigma2 - sigma3…

《mysql篇》--JDBC编程

JDBC是什么 JDBC就是Java DataBase Connectivity的缩写&#xff0c;翻译过来就很好理解了&#xff0c;就是java连接数据库。所以顾名思义&#xff0c;JDBC就是一种用于执行SQL语句的JavaApl&#xff0c;是Java中的数据库连接规范。为了可以方便的用Java连接各种数据库&#xff…

中国高端水果元宇宙

果蔬&#xff0c;即水果和蔬菜&#xff0c;是人类饮食中不可或缺的一部分。它们富含维生素、矿物质、膳食纤维以及抗氧化剂等对人体健康至关重要的营养素。果蔬的摄入被广泛认为是预防多种慢性疾病&#xff0c;如心血管疾病、糖尿病、肥胖和某些癌症的有效手段。 ###水果的特点…

【Python】从基础到进阶(三):深入了解Python中的运算符与表达式

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、运算符1. 算术运算符2. 比较运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 其他运算符 三、表达式1. 表达式的定义2. 运算符的优先级3. 使用括号提升可读性4. 组合运算符与复合表达式 四、案例&#xff1a;计…

使用Java和WebSocket设计大型聊天系统的理论探讨

随着互联网的快速发展&#xff0c;实时通信已成为各类应用的重要组成部分。聊天系统不仅应用于社交媒体&#xff0c;还广泛用于客户服务、在线教育、远程办公等领域。本文将从理论角度探讨如何使用Java和WebSocket设计一个高效、可扩展的大型聊天系统&#xff0c;详细介绍各个关…

微信管理神器能解决哪些问题?

1、为了自身利益&#xff0c;销售离职单独干&#xff08;带走客户&#xff09; 企业的客户都被销售带走了&#xff0c;那企业会遭到一定的损失&#xff0c;客户的资源是非常保密或重要的。 2、销售客户难以统计&#xff0c;不知道销售整体在干啥&#xff08;没有统计&#xf…

redis学习(009 实战:黑马点评:缓存穿透、缓存雪崩 、缓存击穿)

黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第40p-第p45的内容 文章目录 缓存穿透解决方案缓存空对象布隆过滤 解决方案实现缓存穿透总结 缓存雪崩解决方案 缓存击穿解决方…

C++:获取当前可执行核心数(开辟线程)

sysconf(_SC_NPROCESSORS_ONLN) 是一个在 POSIX 兼容系统上广泛使用的函数&#xff0c;它用于获取当前系统上可用的处理器&#xff08;CPU 核心&#xff09;的数量。这个函数是 sysconf 函数的一个特定调用&#xff0c;其中 _SC_NPROCESSORS_ONLN 是一个常量&#xff0c;指定了…

Go协程与通道的综合应用问题

1.简单了解什么是协程和通道 什么是协程 协程&#xff0c;是一种用户级的轻量级的线程&#xff0c;拥有独立的栈空间并共享程序的堆空间。 它是在单线程的基础上通过算法来实现的微线程&#xff0c;相比于多线程编程具有以下优点&#xff1a; 协程的上下文切换由用户决定&a…

基于Go1.19的站点模板爬虫详细介绍

构建一个基于Go1.19的站点模板爬虫是一项有趣且具有挑战性的任务。这个爬虫将能够从网站上提取数据,并按照指定的模板进行格式化。以下是详细的介绍和实现步骤。 1. 准备工作 工具和库: Go 1.19colly:一个强大的Go爬虫库goquery:一个类似于 jQuery 的Go库,用于解析 HTML…

1071 - Specified key was too long; max key length is 3072 bytes Mysql报错解决方法

错误信息 “Specified key was too long; max key length is 3072 bytes” 是在MySQL数据库中创建索引时可能出现的问题&#xff0c;通常出现在尝试创建一个过长的唯一键&#xff08;UNIQUE KEY&#xff09;或主键&#xff08;PRIMARY KEY&#xff09;时。MySQL对于InnoDB存储引…

Codeforces Round 957 (Div.3)

传送门 A. Only Pluses 时间限制&#xff1a;1秒 空间限制&#xff1a;256MB 输入&#xff1a;标准输入 输出&#xff1a;标准输出 问题描述 Kmes 写下了三个整数 a、b 和 c&#xff0c;以记住他要给 Noobish_Monk 的香蕉数量是 a b c。 Noobish_M…

vue3<script setup>自定义指令

main.ts // 自定义指令 app.directive(color,(el,binding) > {el.style.color binding.value })这段代码定义了一个名为color的自定义指令&#xff0c;并将其注册到Vue应用实例app上。自定义指令接收两个参数&#xff1a;el和binding。el是绑定指令的元素&#xff0c;而bi…