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. 第二种只展示一个姓名  手机号又重新查询返回的 这种一个人又多个手机号的不能单独选择代码中是当前联系人的最后一个号码

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

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

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

相关文章

Linux NLTK 安装下载nltk_data

一、前提条件/环境 已经成功安装anaconda环境和nltk。anaconda环境和nltk可参考下面链接进行配置&#xff0c;nltk_data参考本文进行。 Linux安装Anaconda和配置nltk环境_cetons7安装nltk-CSDN博客 二、安装nltk_data 推荐离线安装&#xff0c;亲测成功&#xff01; 1、nltk_…

LLM大模型显存计算

一、目录 模型参数单位内存计算案例显卡算力推理显存计算训练显存计算huggface 官网计算 模型推理/训练 需要的显存大模型输入长度与显存的关系大模型推理 多线程与显存的关系 参考&#xff1a;https://blog.csdn.net/Johntill/article/details/132629075 二、实现 模型参数…

ME6211C33M5G-N 输出3.3V 500mA 线性稳压器LDO 参数

描述 ME6211系列是高精度&#xff0c;低噪声&#xff0c;CMOS LDO电压调压器。ME6211系列提供低输出噪声&#xff0c;高纹波抑制率&#xff0c;低辍学率和非常快速的开启时间&#xff0c;ME6211系列是当今最前沿的手机的理想选择。ME6211内部包括参考电压源、误差放大器、驱动…

什么品牌的护眼灯最好?质量最好的护眼台灯推荐

作为一名家长&#xff0c;家里有两个孩子&#xff0c;为了给孩子营造良好的学习光线&#xff0c;花费了很多时间也费了不少钱去购买体验过许多款护眼台灯&#xff0c;相比传统台灯&#xff0c;护眼台灯不仅仅只是起到照明这么简单&#xff0c;而是舒适养眼的光线&#xff0c;不…

叉车车载终端定制_基于MT6762安卓核心板的车载终端设备方案

叉车车载终端是一款专为叉车车载场景设计的4英寸Android车载平板电脑。它采用了高能低耗的8核ARM架构处理器和交互开放的Android 12操作系统&#xff0c;算力表现强大。此外&#xff0c;该产品还具备丰富的Wi-Fi-5、4G LTE和蓝牙等通讯功能&#xff0c;可选配外部车载蘑菇天线&…

人工智能技术的突破性进展使得AI数字人的出现成为可能

随着科技的飞速发展&#xff0c;人机交互已成为当今社会中的热门话题。近年来&#xff0c;人工智能技术的突破性进展使得AI数字人的出现成为可能&#xff0c;其将开启一个全新的人机交互时代。 AI数字人是一种利用人工智能技术创建的虚拟人物&#xff0c;能够模拟真实人类的思…

【实用技巧】Steam Wallpaper Engine 壁纸引擎向手机导入壁纸方法

一、内容简介 本文介绍如何使用电脑上的 Wallpaper Engine &#xff08;Steam 平台中的壁纸引擎&#xff09;向安卓手机导入并使用壁纸。 二、所需原材料 安卓手机&#xff08;以笔者使用的华为荣耀50为例&#xff09;、安装有Steam以及Wallpaper Engine的电脑 三、导入方法…

构建基于RHEL9系列(CentOS9,AlmaLinux9,RockyLinux9等)的MySQL8.0.32的RPM包

本文适用&#xff1a;rhel9系列&#xff0c;或同类系统(CentOS9,AlmaLinux9,RockyLinux9等) 文档形成时期&#xff1a;2023年 因系统版本不同&#xff0c;构建部署应略有差异&#xff0c;但本文未做细分&#xff0c;对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…

【代码随想录算法训练营-第七天】【哈希表】454,383,15,18

454. 四数相加 II 第一遍 思路 想不出来&#xff0c;除了暴力解法&#xff0c;完全想不出来其他解法&#xff0c;看答案思路了…学习了两个新的方法&#xff1a; getOrDefault&#xff1a;返回指定键对应的值&#xff0c;如果不存在&#xff0c;则返回默认值containsKey&…

干货|Google ads谷歌广告投放详细步骤与技巧

对于跨境电商、独立站运营的卖家来说&#xff0c;谷歌广告投放是必备的流量拓展来源&#xff0c;但是在投入运营之前&#xff0c;你需要完整了解谷歌广告投放详细步骤&#xff0c;以为你丝滑地进行有效投放做好基础&#xff0c;下面为大家整理具体的谷歌投放技巧与步骤&#xf…

uniapp运行自定义底座到真机没反应

同步资源失败&#xff0c;未得到同步资源的授权&#xff0c;请停止运行后重新运行&#xff0c;并注意手机上的授权提示。 如果此时手机没有任何反应&#xff0c;请检查自定义基座是否正确;如果是离线制作的自定义基座包&#xff0c; 请检查离线包制作是否正确。 网上各种查找报…

Unity中URP下实现能量罩(扭曲流光花纹)

文章目录 前言一、能量罩花纹1、在属性面板接收能量罩花纹纹理2、申明 纹理 和 采样器3、在顶点着色器&#xff0c;应用 Tilling 和 Offset4、在片元着色器&#xff0c;纹理采样后&#xff0c;与之前的结果相乘输出 二、能量罩流光1、在顶点着色器&#xff0c;记录原uv值2、在片…