Android 联系人数据库表详解

现在有很多应用都需要读取我们的联系人列表,比如,微信,QQ等等。还有些专门的通讯录应用,就可以不用官方自带的简陋的通讯录,其实所有这些app全部是读取的同一个数据库,就是官方提供唯一的联系人数据库。今天就为大家来讲解下这个数据库的说明和使用。

1.首先手机添加几个联系人
添加联系人
所有联系人

2.然后在此路径下可以找到文件:/data/data/com.android.providers.contacts/databases/contact2.db
联系人数据库路径

3.导出文件,将其导入可视化数据库管理器当中(这里用的是SQLite Expert Personal)
数据库管理器

我去。。这么多表? 无从下手有没有?别着急,这里虽然表很多,其实要用的只有4张表,这里给大家标注下
用到4张表

下面分别对这4张表分别说明:
1、contacts表
contacts表
_id :表的ID,主要用于其它表通过contacts 表中的ID可以查到相应的数据。
display_name: 联系人名称
photo_id:头像的ID,如果没有设置联系人头像,这个字段就为空
times_contacted:通话记录的次数
last_time_contacted: 最后的通话时间
lookup :是一个持久化的储存,因为用户可能会改名,但是它改不了lookup
该表保存了本机保存的所有联系人,每个联系人占一行,该表保存了联系人的ContactID、联系次数、最后一次联系的时间、是否含有号码、是否被添加到收藏夹等信息。

2、raw_contacts表
raw_contacts表
version :版本号,用于监听变化
deleted :删除标志, 0为默认 1 表示这行数据已经删除
display_name : 联系人名称
last_time_contacts : 最后联系的时间
该表保存了所有创建过的手机联系人,每个联系人占一行,表里有一列标识该联系人是否被删除,该表保存了两个ID: RawContactID和ContactID,从而将contacts表和raw_contacts表联系起来。该表保存了联系人的RawContactID、ContactID、联系次数、最后一次联系的时间、是否被添加到收藏夹、显示的名字、用于排序的汉语拼音等信息。

3、mimetypes 表
mimetypes 表
该表定义了所有的MimeTypeID,即联系人的各个字段的唯一标志。

4、data表
data表
raw_contact_id:通过raw_contact_id可以找到 raw_contact表中相对的数据。
data1 到 data15 这里保存着联系人的信息 联系人名称 联系人电话号码 电子邮件 备注 等等。
该表保存了所有创建过的手机测联系人的所有信息,每个字段占一行 ,该表保存了两个ID: MimeTypeID和RawContactID,从而将data表和raw_contacts表联系起来。联系人的所有信息保存在列data1至data15中,各列中保存的内容根据MimeTypeID的不同而不同。如保存号码(MimeTypeID=5)的那行数据中,data1列保存号码,data2列保存号码类型(手机号码、家庭号码、工作号码等)。

下面说下操作联系人的方法
首先要是加入这两个权限

<!-- 读联系人权限 -->
 <uses-permission android:name="android.permission.READ_CONTACTS"/>
 <!-- 写联系人权限 -->
 <uses-permissionandroid:name="android.permission.WRITE_CONTACTS" />

读取联系人需要步骤如下:
1.先读取contacts表,获取ContactsID;
2.再在raw_contacts表中根据ContactsID获取RawContactsID;
3.然后就可以在data表中根据RawContactsID获取该联系人的各数据了。

新建联系人步骤如下:
1.新建联系人时, 根据contacts、raw_ contacts两张表中ID的使用情况,自动生成ContactID和RawContactID。
2.Android源码新建重复姓名的联系人的ContactID是不重复的,所以会重复显示。
3.用下面的代码新建联系人,如果多次新建的联系人的姓名是一样的,生成的ContactID也会重复, RawContactID不会重复,我们在读取联系人的时候可以获取所有同姓名联系人的号码等信息,在显示联系人的时候,重复姓名的联系人的所有字段信息都会合并起来显示为一个联系人。

删除联系人:
非常简单只需要将raw_contacts表中指定RawContactID的行删除,其他表中与之关联的数据都会自动删除。

更新联系人:
联系人的所有信息都是保存在data表中,所以要更新联系人,我们只需要根据RawContactID和MIMETYPE修改data表中的内容。

——转自“威哥”

  • 13
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值