Android content provider 获取手机联系人

Android contacts 联系人 通讯录 源码 完全解析 Android contacts 联系人 通讯录 源码 完全解析Android contacts 联系人 通讯录 源码 完全解析 1简介 2软件架构 3各功能模块分析 1联系人数据的显示 1联系人列表显示 2联系人详细信息数据的显示 2联系人数据的编辑和存储 1编辑界面相关 2数据存储相关 3Sim联系人数据的整合 1Sim卡联系人数据的显示 2开机自动导入Sim卡联系人 3telephony中Ic 阅读详情

说说Android联系人信息的组织结构及读取

这是Android给出的联系人组织结构图。分为三层。

第一层,Contact,即ContactContract.Contacts,是整合的联系人信息。

第二层,RawConact,即ContactContract.RawContact,记录的是该联系人来自某信息源的信息,例如本地输入的,来自Google的,从微软Exchange中导出的,或则来自某个社交网站的信息。每个RawContact记录的信息都来自同一信息源。

第三层,Data,即ContactContract.Data,是具体的信息存储,例如记录联系人姓名,email信息,家庭电话,手机电话信息等等,每一个Data都存放一个具体的信息。在Data中的MIME TYPE说明存储信息的类型。具体在ContactContract.CommonDataKinds中定义。每个Data中有DATA1-DATA15个字段来存储信息,各字段所代表的含义,也可以在CommonDataKinds中具体查到。

下面,我们一层一层地读取联系人信息,将更清晰地看到这个结构。要读取详细信息,对于Content Privider,关键是Uri逐层定位,才能获取信息。为了清晰表述,我们将整个路径写出来。

第一层信息,将返回联系人列表中的多个Contacts,Uri为ContactsContract.Contacts.CONTENT_URI

private String[] INFO_1= new String[]{ 
    ContactsContract.Contacts._ID,//这是每个row,也就是每个联系人的唯一的ID标识
    ContactsContract.Contacts.DISPLAY_NAME, 
}; 
Cursor cursor = managedQuery(ContactsContract.Contacts.CONTENT_URI,INFO_1,null,null,null);

cursor是表格形式,每一个行表示一个联系人。要读取哪些列,在第二个参数String[]中定义。可以选取那些列,在Android Reference中的ContactsContract.Contacts中的Column中可以查到。最关键的列信息为_ID,它是行,也就是每个联系人的唯一标识。除此之外,每个联系人的信息会根据旗下的RawContact进行整合,因此,我们可以查到联系的名字ContactsContract.Contacts.DISPLAY_NAME等。

利用Contacts._ID,我们可以检索第二层的信息。

第二层信息,将返回某联系人的多个RawContacts

同样,返回表格中的列,可以查看ContactsContract.RawContacts中查看。我们选取下面的信息,此外,如果要查看信息的来源,例如来自com.google,可通过RawContacts.ACCOUNT_TYPE和RawContacts.ACCOUNT_NAME两个列查看。

private String[ ] INFO_2 = { 
    ContactsContract.RawContacts._ID, //这是RawContact的唯一标识 
    ContactsContract.RawContacts.CONTACT_ID, //这是该RawContact关联的Contact._ID
};

通过查询全部的RawContacts,通过条件检索,要求联系人的ID为指定的某联系人。在下面的例子在managedQuery中给出了param3和param4的条件,注意参数3,如果我们有多个条件,可以用AND等逻辑符合进行表述。

Cursor cursor = managedQuery(ContactsContract.RawContacts.CONTENT_URI , 
                                                     INFO_2 , 
                                          RawContacts.CONTACT_ID + "=?" ,
                                          new String[]{String.valueOf(contactId)} ,
                                                    null);

通过RawContacts._ID,我们可以往下检索RawContacts下面各Data的信息内容。

第三层信息:将返回某RawContact的各Data的信息

可查询各列的信息见ContactsContract.Data的介绍。

private String INFO_3[] = { 
    ContactsContract.Data._ID, //这是Data信息块的唯一标识
    ContactsContract.Data.CONTACT_ID, //关联第一层信息的CONTACT_ID
    ContactsContract.Data.RAW_CONTACT_ID, //关联第二层信息的RAW_IDCONTACT_ID
    ContactsContract.Data.MIMETYPE, //具体含义可查ContactsContract.CommonDataKinds
    ContactsContract.Data.DATA1, //通常读取DATA1就可以,在具体的ContactsContract.CommonDataKinds.Phone/Email等查到DATA1-DATA15的含义
    ContactsContract.Data.DATA2, 
    … … 
    ContactsContract.Data.DATA15, 
};

读取的方式有两种。

方式一:指定定具体的Uri:

Uri rawContactUri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, rawId);
Uri dataUri = Uri.withAppendedPath(rawContactUri,ContactsContract.RawContacts.Data.CONTENT_DIRECTORY);
Cursor cursor = managedQuery( dataUri, INFO_3,null, null, null);

方式二:另一种是利用RawContacts_ID或者Contact_ID,通过Data.CONTENT_URI,具体方式类RawContacts的检索。

Cursor cursor = managedQuery(ContactsContract.Data.CONTENT_URI , 
                                                     INFO_3 , 
                                          ContactsContract.Data.RAW_CONTACT_ID + "=?" ,
                                          new String[]{String.valueOf(rawId)} ,
                                                    null);


Android开发之contentprovider获取手机所有联系人(姓名、号码、邮箱) 1、得到 ContentResolver 。 ContentResolver resolver = getContentResolver(); 2、拿到手机联系人信息(姓名、号码、邮箱)URL。 获取手机联系人:ContactsContract.RawContacts.CONTENT_URI  获取手机联系人手机号:ContactsContract.Common 阅读详情

相关推荐

Android语言基础教程(205)Android预定义Content Provider范例之查询联系人ID和姓名:Android联系人读取全攻略:原来Content Provider可以这么玩!

在Android开发世界里,让应用获取手机联系人信息就像是给它装上了“社交雷达”。想象一下,你的应用能够优雅地访问用户的联系人列表,而不是尴尬地要求用户手动输入——这不仅是用户体验的巨大提升,更是让你的应用显得专业又贴心。今天,就让我们一起揭开Android预定义Content Provider的神秘面纱,尤其是如何查询联系人的ID和姓名,让你的应用瞬间变身“社交高手”。

jxf_jxfcsdn的博客 1558

ContactsContract.Contacts.CONTENT_URI无法获取手机号码

本文适用于没接触过ContentProvider的人需求:打开系统联系人,获取手机号码。 可能会遇到的问题:同一个用户多个手机号码 像类似获取系统图片那样去获取手机号码最开始根据Action事件在startActivityForResult中找到官方的文档说明(毕竟我觉得这种应该很容易去实现,一个Action就可以了) public class MyActivity extends Activi

Fred 7347

利用contentprovider和ContentResolver获取手机联系人信息

利用contentprovider和ContentResolver获取手机联系人信息

android读取通讯录联系人问题

魅族手机获取联系人信息获取不到的问题

yangshuangyue的博客 2186

Android新手Content Provider获取通讯录,短信,通话记录

理解Content Uri的概念和作用,掌握通过Content Provider访问联系人的方法,掌握通过Content Provider访问通话记录的方法,掌握通过Content Provider访问短信的方法。

GIS坐标系转换以及空间校正和地理配准

许多小伙伴都对坐标系,投影这类问题迷迷糊糊,我之前也一样,现在总结一下。 坐标系的转换1.为什么要进行坐标系的转换?2. 不同坐标系的介绍1.地理坐标系我国常见的地理坐标(1).北京54坐标系(2).西安80坐标系(3).WGS-84坐标系(4).大地2000坐标系2.投影坐标系我国常用的投影坐标系(1) UTM投影(2) 高斯-克吕格投影(3) 兰伯特投影(4) 阿尔伯斯投影投影坐标系的选择3. 坐标系的转换1.已知坐标系之间的转换1.1 两坐标系的参考椭球相同1.2 两坐标系的参考椭球不一致,但是GIS

m0_47258611的博客 8913

Android Studio初学者实例:ContentProvider读取手机通讯录

其次是RecyclerView的item布局代码,其中使用了CardView是为了方便快捷的弄个圆角储来。知识点包含了RecyclerView控件、UriMatcher、ContentResolver。该实验是通过ContentProvider读取手机通讯录。先看效果,显示手机通讯录。首先是界面的布局代码。

林大大的博客 7452

从零构建智能监控系统:ZLMediaKit与SpringBoot的RTSP流处理实战

本文详细介绍了如何从零构建智能监控系统,结合ZLMediaKit与SpringBoot实现RTSP流处理。通过多协议支持、高性能架构设计及工业级部署优化,解决传统监控方案的兼容性差、延迟高等问题,适用于物联网和智能安防领域。

weixin_29002209的博客 370

AndroidContrentProvider 获取系统联系人数据。

如果使用模拟器测试,就要先在模拟器中添加联系人数据。 在手机上测试,如果联系人比较多,也许会出现无法响应的情况,那么这时候的操作就要用到子线程了

qq_37127054的博客 388

Figma汉化教程

Figma汉化教程

cc蒲公英的博客 1万+

(UE4 4.27) HISM性能优化:从空间剔除到合批渲染的实战解析

本文深入解析了UE4 4.27中HISM(UHierarchicalInstancedStaticMesh)组件的性能优化原理与实战技巧。核心在于利用其N叉树空间结构实现高效的CPU视锥剔除,并结合GPU实例化进行合批渲染。文章详细探讨了从控制叶子节点粒度、平衡剔除精度与渲染效率,到结合LOD系统等关键参数的调优方法,为开放世界或大场景的植被性能瓶颈提供了系统解决方案。

weixin_29015051的博客 327

获取手机通讯录联系人

1、手机联系人的信息domain类: /** * @author Administrator * 手机联系人的信息封装 */ public class ContantBean { private String phone; private String name; public String getPhone() { return phone; } public void s

GitLqr的博客 1201

Spark Graphx 项目实战(航班飞行网图分析)

航班飞行网图分析一.需要的技能点二.任务描述三.数据探索1.下载数据2.数据格式四.航班飞行网图问题分析1.构建航班飞行网图2.统计航班飞行网图中机场与航线的数量3.计算最长的飞行航线4.找出最繁忙的机场5.找出最重要的飞行航线6.找出最便宜的飞行航线五.代码实现 一.需要的技能点 Spark GraphX API Spark GraphX PageRank Spark GraphX Pregel 二.任务描述 需求概述: 探索航班飞行网图数据 构建航班飞行网图 使用Spark GraphX完成下列任

May_J_Oldhu的博客 1538

访问手机中联系人页面

我们只需要在控件的监听方法中实现下面的代码 这个是开启手机联系人页面的关键 使用的是隐式跳转startActivityForResult(new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI), 1);这样就能点击跳转到手机联系人 返回的时候我们调用返回的生命周期

Mannver的博客 1156

LeRobot 入门教程(十一)π0(Pi0)π0.5(Pi0.5)训练、推理、部署

本文介绍了Physical Intelligence公司开发的π₀和π₀.₅系列通用机器人控制视觉-语言-动作模型。π₀作为首款基础模型,融合流匹配、跨实体训练等技术,支持50Hz高频控制。π₀.₅是其升级版,通过异构数据协同训练解决开放世界泛化问题,在Libero基准测试中表现优异。文章详细说明了两个模型的安装要求、使用方法、训练策略及关键参数配置,包括混合精度训练、梯度检查点等优化技术,为机器人在多样化场景中的语义理解和动作控制提供了完整解决方案。

2506_90492529的博客 5036

43、FMCW雷达高度计仿真

本文介绍了FMCW雷达高度计的波形级建模与仿真过程,重点模拟了着陆和倾斜两种飞行场景以评估其性能。通过结合高程数据和飞行轨迹构建雷达场景,使用自定义信号处理器分析IQ样本并估计高度。结果表明,该高度计在多数情况下满足性能要求,但也存在误差较大的点,提出了地面检测算法优化的潜在方向。

neovim7hacker的博客 135

Android官方API Demo学习之联系人获取

Android官方API Demo学习之联系人获取/** * Android API Demos之获取手机联系人 * * @description: * @author ldm * @date 2016-4-19 上午10:28:27 */ public class MainActivity extends ListActivity { static final String[

true100的专栏 2302

基于投影法实现扫描文件的光学字符分割——Matlab实现

投影法是指将原图像沿着某个特定的方向进行投影,得到投影线上的像素点的个数或像素值总和,从而可以得到该方向上物体的轮廓信息。对于字符分割,我们可以将图像进行水平和垂直两个方向的投影,从而得到字符之间的分割线。在OCR技术中,字符分割是非常重要的一步骤,因为字符之间的分割对字符识别的准确性有很大的影响。通过对投影值的判断,可以求出字符之间的分割线,这里我们根据垂直方向上的投影值进行判断,选取一个阈值进行筛选即可。使用sum()函数分别计算出水平和垂直方向上的投影值,得到每一行和每一列的投影值。

TechGlide的博客 581

获取android手机通讯录 SIM卡

通讯录上的信息,存储在两个地方,一个是 SIM 卡,一个是手机本地,   首先是手机本地: Cursor cursor =  getContentResolver().query(People.CONTENT_URI, null,  null, null, null);  while (cursor.moveToNext()) {  ContactInfo cci = new C

cy-app 1442

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

android内容访问者+获取联系人信息

android 通过内容访问者获取所以联系人

qq_37530633的博客 570

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Android端通话记录读取

Android端读取手机通话记录,直接上代码: public class CallInfo { public String name; public String number; // 号码 public long date; // 日期 public int type; // 类型:来电、去电、未接 public String

qq_34343393的博客 733

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Android中通过ContentProvider来获取系统联系人

需要注意的是,要想获取系统联系人,首先应在AndroidManifest中获取读取联系人权限,即添加如下代码:             如果使用模拟器运行时,需要先在模拟器里面添加一些联系人,手机运行的话,如果有联系人就不需要添加了,否则也需要添加。 MainActivity代码如下: import java.util.ArrayList; import java.ut

Android学习 640

Android学习之通过content provider获得联系人

package cn.mycontent; import android.app.Activity; import android.content.ContentResolver; import android.database.Cursor; import android.graphics.Color; import android.net.Uri; import android...

daixj110的专栏 176

android_ContentProvider获取手机联系人

1.先写一个按钮 2.第二步获取 ContentResolver //获取内容访问者 ContentResolver cr=getContentResolver(); 3.写一个方法public void getContacts(View view){ Uri uri=Uri.parse("content://com.android.contacts/raw_co

wu15111685657的博客 319

获取手机联系人(Contentprovider)

1.配置系统权限 2.主函数 public class MainActivity extends AppCompatActivity { private ListView lv; private ArrayList> arr; private SimpleAdapter adap; private Uri uri1= ContactsCon

你全家都是博客 421

Android四大组件——Content Provider

例如,用户只需知道有一个insert方法可以插入数据,并且向该方法传递待插入的数据即可,其并不关心数据是如何插入的,也不关心数据的具体组织形式。但是,程序不能直接操作Content Provider,而是借助名为Content Resolver的类,如下图所示。Content Provider 使用基于数据库模型的简单表格来提供需要共享的数据,在该表格中,每一行表示一条记录,而每一列代表特定类型和含义的数据,并且其中每一条数据记录都包含一个名为“_ID”的字段类标识每条数据。但是该过程是主动地读取数据。

2301_79188932的博客 1079
上一篇: Android ContentProvider
下一篇: Android 多媒体(音乐播放器)
G_MuHan
博客等级 码龄9年 31粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值