当前位置: 首页 > 操作系统 > 手机系统 > 正文

android联系人信息的存储结构

时间:2016-09-09 csdn博客 a910626

在新的Contacts API中,联系人数据被放到三张表中:Contacts、RawContacts和Data。这样可以帮助系统更好地存储与管理一个联系人的多个帐户的信息。

一、写在前面

1.联系人的内容是添加在一个数据库中的

com.android.providers.contacts//联系人的相关(数据库共享者的)应用

这个数据库文件就存在:data/data/com.android.providers.contacts/database下

contact2.db

2.联系人的各项数据,联系人的电话,email等存在data表中

raw_contacts表和data表是一对多的。

Data表存储了联系人的详细信息,表中的每一行存储一个特定类型的信息,比如Email、Address或Phone。每一行通过一个mimetype_id的字段来表示该行存储的是什么类型的数据,该字段引用了mimetyps表,此表存储了常用的数据类型。

如果data表该行存的是电话,那么data1用来存电话,data2用来存电话的类型,比如是家庭电话还是手机等。

如果data表该行存的是姓和名,那么data1用来存姓和名,data2存的名字,data3存姓。

如果该行存的是邮箱,那么data1用来存邮箱的地址,data2用来存email的类型。

即该行主数据不同,对应的data1-data15表示的含义也是不同的。因此,我们使用contentprovider增加姓名、电话、邮件等等,都是操作的data表,而不是raw_contacts表,也不是contacts表。

3.cells表用来存呼叫记录

4.raw_contacts表

display_name是用来存放姓加名的组合的,我们从使用contentprovider的时候不能直接往raw_contacts表的该字段添加姓名。正确的做法是向data表插入姓名,当data表中插入姓名的时候,才会发出update更新raw_contacts.中的姓名字段,这个字段是用来快速的得到联系人名字的。

通过这个表的id和data表中的一个外键rawcontact_id,就可以知道某几行(如姓名行,电话行,邮件行等)属于哪个联系人的信息。

我从自己的小米手机通讯录中导出的各种联系人数据库:

二、contact表