`
wenzongliang
  • 浏览: 448203 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

android 联系人详解

 
阅读更多

操作联系人工程需要权限,不然会报错。

<uses-permission android:name="android.permission.READ_CONTACTS" ></uses-permission> 
<uses-permission android:name="android.permission.WRITE_CONTACTS" ></uses-permission>

android联系人是用数据库存储的,数据库结构如下:



 

 

 

 raw_contacts表:
主要存储了每个联系个的唯一表示字段_id字段。

data表:
raw_contact_id就是raw_contacts中的_id字段,所有raw_contact_id值相同的都是
同一个联系人的属性信息。
mimetype_id 字段就是表示单点这条记录是默认联系的什么属性(例如:手机号,邮箱)

mimetypes表:
_id字段就是data表中的mimetype_id,
mimetype就是对应的联系人属性类型。某一个miemetype又有子类型(例如:miemetype 为手机号,
手机号又分为,工作手机号,住宅手机号(android里1开头的都认为是手机号,其他为座机号)),
这些子类型标识存在data表中的data1-data15某个字段中,子类型的解释在api 参考文档里。一条记录mimetype
类型决定data1-data15的意义。例如:
mimetype姓名,data1 为全称,则data2存放名,data3存放姓。
mimetype电话,data1存放电话号码,则data2存放类型,比如手机、家电(以一个数值表示,对应关系参看api,在api哪个地方下面的内容会说);


知道了这些表是存联系人的,该如何访问呢
代表联系人各个表的类是level5以前是Contacts,之后是ContactsContract,这个类里面有很多的内部类,
ContactsContract.RawContacts就是代表了表raw_contacts(可以查询所有联系人的id)
ContactsContract.Data就代表了表data(可以查询每个id联系人的详细信息)
这表的访问是通过URI在访问的,例如raw_contacts表的访问URI是ContactsContract.RawContacts.CONTENT_URI
查询某个字段可以通过ContactsContract.RawContacts的代表表字段常量,例如查_id字段对应的ContactsContract.RawContacts的常量是ContactsContract.RawContacts._ID
例如(resolver.query(RawContacts.CONTENT_URI,new String[] { RawContacts._ID }, null, null, null); // 获得_id属性)

得带了raw_contact表中的_id值就可以查这个_id对应联系人的详细信息了。
例如:resolver.query(Data.CONTENT_URI, new String[] {
     Data.MIMETYPE, Data.DATA1, Data.DATA2, Data.DATA3,
     Data.DATA4, Data.DATA5, Data.DATA6, Data.DATA7, Data.DATA8,
     Data.DATA9, Data.DATA10, Data.DATA11, Data.DATA12,
     Data.DATA13, Data.DATA14, Data.DATA15 }
这里得到的Data.MIMETYPE就是mimetype字段,对应的字符mimetypes表中mimetype字段的字符串,应该是内部做了联合查询。
有了Data.MIMETYPE类型,就可以参看api参考知道用了data1-data15那些字段,各个字段的含义,含义在ContactsContract.CommonDataKinds类中,ContactsContract.CommonDataKinds一个内部类代表一种mimetype。
例如mimeType.equals(Email.CONTENT_ITEM_TYPE);
mimeType就是类型字符串,Email就是邮件类型对应的类,这个类中详细说明了data1-data15的含义。例如:

Type Alias Data column
String ADDRESS DATA1 Email address itself.
int TYPE DATA2 Allowed values are:
    TYPE_CUSTOM. Put the actual type in LABEL.
    TYPE_WORK
    TYPE_OTHER
String LABEL DATA3 

ADDRESS 代表邮件地址摘data1中
邮件类型(工作邮件TYPE_WORK,自定义类型TYPE_CUSTOM,其他TYPE_OTHER)。
这些子类型有的厂商不需要那么详细就用了部分定义,但都遵循了这个标准结构都是相同的。

下面付代码,在log打印了所有详细信息,大家不需要那么详细的可以截取用。

  • 大小: 40.5 KB
  • 大小: 92.1 KB
  • 大小: 7.7 KB
分享到:
评论

相关推荐

    Android中使用Content Provider组件访问通讯录中的联系人和添加联系人案例详解

    Android中使用Content Provider组件访问通讯录中的联系人和添加联系人案例详解!

    Android应用开发详解pdf.pdf

     第一篇 基础篇第1章 Android概述Android概述,讲述了Android的前生后世、架构和特点、Android Market、应用程序组件和Android与Java ME的区别及联系  第2章 Android开发基础Android开发基础,讲述了Android开发...

    android系统原理及开发要点详解_韩超_梁泉 4

    本资料搜集自网络,如果有侵犯您的权益,请联系提供下载的网站或本人,收到知会将删除。 第1章“Android系统概述”,概述Android系统方面的内容,包括智能手机平台的发展历程、Android系统的特点、Android的3种开发...

    Android 获取手机联系人实例代码详解

    最近做了个项目,其中有项目需求是这样的,需要获取手机联系人,下面小编把代码分享给大家,供大家参考

    android系统原理及开发要点详解_韩超_梁泉 1

    本资料搜集自网络,如果有侵犯您的权益,请联系提供下载的网站或本人,收到知会将删除。 第1章“Android系统概述”,概述Android系统方面的内容,包括智能手机平台的发展历程、Android系统的特点、Android的3种...

    Android Mms之:对话与联系人关联的总结详解

    本篇文章是对Android中对话与联系人的关联进行了详细的分析介绍,需要的朋友参考下

    Android仿微信联系人按字母排序

    但凡涉及到联系人界面,几乎都是按照字母排序的,那么联系人按字母排序是怎么实现的呢,下面小编就给大家详解Android仿微信联系人按字母排序,需要的朋友可以参考下

    Android仿微信联系人字母排序效果

    大家使用到的联系人界面,几乎都是按照字母排序,如何实现联系人按字母排序?下面就为大家详解介绍了Android仿微信联系人按字母排序的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    疯狂Android讲义源码

     联系人 355  9.2.2 使用ContentProvider管理  多媒体内容 360  9.3 实现ContentProvider 364  9.3.1 创建ContentProvider的步骤 364  9.4 监听ContentProvider的数据  改变 370  9.4.1 ContentObserver简介...

    Google Android SDK开发范例大全(第3版) 1/5

    系统服务及研发的整合:网络搜索、联系人、音乐、应用程序、定制手机文件管理、记忆卡I/O存取、双向短信、闹钟服务、开机程序、来电通信互动、拜年短信、信息提醒、电池电量显示、进度显示、取得应用程序信息等。...

    浅析Android手机卫士读取联系人

    详解Android 手机卫士设置向导页面 浅析Android手机卫士关闭自动更新 浅析Android手机卫士自定义控件的属性 获取ContentResolver内容解析器对象,通过getContentResolver()方法 调用ContentResolver对象的query()...

    Android 标准Intent的使用详解

    1 根据联系人ID显示联系人信息 Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); //显示联系人信息 intent.setData(Uri.parse(content://contacts/people/492)); startActivity(intent); 2 ...

    Google Android SDK开发范例大全(第3版) 4/5

    系统服务及研发的整合:网络搜索、联系人、音乐、应用程序、定制手机文件管理、记忆卡I/O存取、双向短信、闹钟服务、开机程序、来电通信互动、拜年短信、信息提醒、电池电量显示、进度显示、取得应用程序信息等。...

    Google Android SDK开发范例大全(第3版) 3/5

    系统服务及研发的整合:网络搜索、联系人、音乐、应用程序、定制手机文件管理、记忆卡I/O存取、双向短信、闹钟服务、开机程序、来电通信互动、拜年短信、信息提醒、电池电量显示、进度显示、取得应用程序信息等。...

    Google Android SDK开发范例大全(第3版) 5/5

    系统服务及研发的整合:网络搜索、联系人、音乐、应用程序、定制手机文件管理、记忆卡I/O存取、双向短信、闹钟服务、开机程序、来电通信互动、拜年短信、信息提醒、电池电量显示、进度显示、取得应用程序信息等。...

Global site tag (gtag.js) - Google Analytics