Android中两种选择联系人方式

1.在选择联系人方式网上也有很多案例 有的说是使用ContactsContract.CommonDataKinds.Phone.CONTENT_URI也有的说是使用ContactsContract.Contacts.CONTENT_URI其实这两种方式都可以使用 只不过ContactsContract.Contacts.CONTENT_URI这种方式需要多查询一遍

一、使用ContactsContract.CommonDataKinds.Phone.CONTENT_URI跳转到选择联系人

//跳转到选择联系人界面private fun openLinkman() {val intent = Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI)linkmanResultLauncher.launch(intent)}//联系人回调private val linkmanResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->if (result.resultCode == RESULT_OK) {val contactUri: Uri = result.data?.data ?: return@registerForActivityResultval projection: Array<String> = arrayOf(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER)contentResolver.query(contactUri, projection, null, null, null).use { cursor ->if (cursor != null && cursor.moveToFirst()) {val nameIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)val displayName = cursor.getString(nameIndex)val phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)val phoneNumber = cursor.getString(phoneIndex)Log.e(TAG, "姓名:$displayName 手机号:$phoneNumber  count:${cursor.count}")}}}}

这里把openLinkman方法改成这样也是一样的

private fun openLinkman() {val intent = Intent(Intent.ACTION_PICK)intent.type = ContactsContract.CommonDataKinds.Phone.CONTENT_TYPElinkmanResultLauncher.launch(intent)
}

展示效果

请添加图片描述请添加图片描述

二、使用ContactsContract.Contacts.CONTENT_URI跳转到选择联系人

private fun openLinkman() {val intent = Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI)linkmanResultLauncher2.launch(intent)
}//联系人回调private val linkmanResultLauncher2 = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->if (result.resultCode == RESULT_OK) {val contactUri: Uri = result.data?.data ?: return@registerForActivityResultcontentResolver.query(contactUri, null, null, null, null)?.use {cursor->if (cursor.moveToNext()){val nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)//获取联系人姓名val displayName = cursor.getString(nameIndex)var phoneNumber = ""//获取idval idIndex = cursor.getColumnIndex(ContactsContract.Contacts._ID)val id = cursor.getString(idIndex)//判断是否有手机号val hasPhoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER)val hasPhone = cursor.getString(hasPhoneIndex) //等于1就是有手机号if(hasPhone == "1"){//重新查询手机号contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,"${ContactsContract.CommonDataKinds.Phone.CONTACT_ID} = $id",null,null)?.use { phonesCursor->while (phonesCursor.moveToNext()){val phoneIndex = phonesCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)phoneNumber = phonesCursor.getString(phoneIndex)}}}Log.e(TAG, "姓名:$displayName  手机号:$phoneNumber")}}}}

展示效果

在这里插入图片描述

在这里插入图片描述

两则的区别

 1. 第一种联系人和姓名展示出来了 (不需要申请权限)2. 第二种只展示一个姓名  手机号又重新查询返回的 这种一个人又多个手机号的不能单独选\n择代码中是当前联系人的最后一个号码(需要申请android.permission.READ_CONTACTS权限)

这两种方式看需求使用就好了

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

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

相关文章

23. 合并 K 个升序链表(递归分治)

这是我的第一个自己ak的分治题目&#xff01;&#xff01;&#xff01;好耶&#xff01;&#xff01;&#xff08;骄傲脸 思路参考&#xff1a;148. 排序链表&#xff08;归并排序&#xff09; /*** Definition for singly-linked list.* public class ListNode {* int v…

龙芯系统部署Elasticsearch

1.配置JDK环境 #查看是否安装jdk java -version#搜索java&#xff0c;结果&#xff1a;/usr/bin/java whereis java#&#xff08;1&#xff09;配置环境变量(临时有效) export JAVA_HOME/usr export PATH$PATH:$JAVA_HOME/bin#&#xff08;2&#xff09;配置环境变量(永久有效…

DA14531-高级应用篇-用户如何开启OTA服务

文章目录 1. OTA相关文件2.OTA宏定义列表3.OTA主要函数接口4.OTA具体实施步骤5.总结1. OTA相关文件 1)app_suotar_task.c和app_suotar_task.h 2)app_suotar.c和app_suotar.h 2.OTA宏定义列表 宏定义注解CFG_PRF_SUOTAR用户开启SOTA功能BLE_SUOTA_RECEIVERSOTA功能服务CFG_S…

把树状数组在页面显示成‘/‘/‘形式,并搜索想要的值

大概思路 在Vue中&#xff0c;若要将树状数组以类似于文件路径的形式&#xff08;即“/”分隔&#xff09;显示在页面上&#xff0c;可以按照以下步骤操作&#xff1a; 首先&#xff0c;假设您有一个树状数组&#xff0c;其结构可能如下所示&#xff1a; const treeData [{…

浅谈专项测试之弱网络测试

一&#xff0e;弱网络测试背景 移动端产品的使用并非完全都是在流畅的wifi环境&#xff0c;大部分用户主要使用4G,3G,2G等网络&#xff0c;另外因为移动端产品使用的场景多变&#xff0c;如进公交&#xff0c;上地铁&#xff0c;坐电梯&#xff0c;使得弱网测试显得尤为重要。考…

QT-JSON相关API/QJsonDocument/QJsonObject

QJsonObject类的相关操作 格式化排版创建JSON对象&#xff0c;使用字符串创建JSON对象&#xff0c;使用标准JSON对象获取JSON对象中的值&#xff0c;非数组获取JSON对象中的值&#xff0c;数组 格式化排版 下面的代码将一个符合JSON格式的字符串&#xff0c;格式化成具有缩进格…

HCIA基础知识

IP地址、静态路由、动态路由、交换机 OSPF RIP DHCP VLAN ACL NAT OSI TCP/IP UDP TCP 三次握手&#xff0c;四次挥手&#xff0c;报头 什么是网络&#xff1f; 由网络连接设备通过传输介质将网络终端设备连接起来&#xff0c;进行资源共享、信息传递的平台。 OSI七…

【C】函数指针 int (*addPtr)(int, int);

目录 函数指针1&#xff09;定义2&#xff09;声明和赋值3&#xff09;通过函数指针调用函数4&#xff09;用途&#xff1a;函数指针作为函数参数5&#xff09;函数名和函数指针6&#xff09;复杂一点的例子 函数指针 1&#xff09;定义 在C语言中&#xff0c;函数指针是指向…

智慧校园云桌面解决方案应用场景

​​​​​​教师办公解决方案 教师办公桌面现状 大多数学校一位教师配置一台个人计算机,实际上每位教师平时会使用到的计算机资源不超过15-20%,因此多数时间个人计算机都是处在闲置状态。教师常用的办公用机一般都使用台式机,所有的数据都存放在本地(“信息孤点”),根…

如何购买腾讯云服务器?图文教程超详细

腾讯云服务器购买流程很简单&#xff0c;有两种购买方式&#xff0c;直接在官方活动上购买比较划算&#xff0c;在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵&#xff0c;但是自定义购买云服务器CPU内存带宽配置选择范围广&#xff0c;活动上购买只能选择固定的活动…

​MyBatisPlus的批量插入方法saveBatch时速度缓慢​

一、场景描述 项目组在使用MyBatisPlus的批量插入方法saveBatch时速度缓慢&#xff0c;插入1w条数据&#xff0c;需要近1分钟的时间。 二、解决方案 解决方案很简单&#xff0c;在数据库配置的uri后面加上下面这个属性即可&#xff1a; urlxxxxxxxxxxxxxxxxxxxxxx?rewriteB…

2024年学鸿蒙开发就业前景怎么样?

随着科技的不断进步&#xff0c;鸿蒙系统作为华为自主研发的操作系统&#xff0c;逐渐引起了人们的关注。 2024年&#xff0c;鸿蒙开发就业前景如何&#xff1f; 对于那些对鸿蒙开发感兴趣并希望在这一领域寻找职业发展的人来说&#xff0c;这是一个非常重要的问题。 首先&a…

【cuda】三、矩阵相乘与coalescing writes(合并写操作)

Matrix Multiplication and Optimization 线程块 功能 并行执行&#xff1a;线程块是一组同时执行的线程。它们共同执行分配给它们的任务资源共享&#xff1a;线程块内的线程可以共享数据和同步执行。通过共享内存&#xff08;Shared Memory&#xff09;和同步原语&#xff…

[渗透测试学习] Hospital - HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描一下端口 发现8080端口和443端口有http服务 然后发现3389端口是启用了ms-wbt-server服务 在对443端口的扫描没有收获,并且只有邮箱登录界面无法注册 接着看向8080端口,我们随便注册用户登录后发现有文件上传功能 getshell …

Python科学计算进阶:数值积分与微分求解算法应用在Python

在Python中进行科学计算时&#xff0c;数值积分和微分是非常常见的操作。下面我将介绍几种常用的数值积分和微分求解算法&#xff0c;并给出Python代码示例。 一、数值积分 矩形法 矩形法是一种简单的数值积分方法&#xff0c;它使用矩形近似代替被积函数。这种方法虽然简单&a…

利用淘宝/天猫API实现商品数据的实时获取、处理与分析

随着电子商务的飞速发展&#xff0c;对电商平台的数据需求越来越高。对于商家而言&#xff0c;实时获取商品数据是关键。淘宝和天猫作为中国最大的电商平台&#xff0c;提供了丰富的API接口&#xff0c;其中包括按关键字搜索商品API。本文将详细介绍如何使用淘宝/天猫提供的API…

【SpringMVC】—— 如何配置使用SpringMVC(详细步骤)

目录 引言 使用 1、新建模块 2、导入坐标 3、创建SpringMVC控制器类 4、初始化SpringMVC环境 5、初始化Servlet容器&#xff0c;加载SpringMVC环境 6、配置运行 引言 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架&#xff0c;SpringMVC是表现层(web层)的框架,也…

.Net6使用SignalR实现前后端实时通信

代码部分 后端代码 &#xff08;Asp.net core web api&#xff0c;用的.net6&#xff09;Program.cs 代码运行逻辑&#xff1a; ​1. 通过 WebApplication.CreateBuilder(args) 创建一个 ASP.NET Core 应用程序建造器。 2. 使用 builder.Services.AddControllers() 添加 MVC 控…

两周掌握Vue3(五):自定义指令、路由、ajax

文章目录 一、自定义指令1.创建和使用自定义指令2.钩子函数3.使用参数 二、路由1.创建一个router实例2.在components目录中创建组件3.将路由实例挂载到应用4.使用路由 三、Ajax 代码仓库&#xff1a;跳转 当前分支&#xff1a;05 一、自定义指令 自定义指令是Vue.js框架提供的…

揭秘返利机器人的工作原理与实现思路

揭秘返利机器人的工作原理与实现思路 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我将为你揭示返利机器人的工作原理与实现思路&#xff0c;让你…