先看2张图:
第一张效果图,本人对一个联系人经行了多种数据的添加,基本上讲系统自带的各种数据形式,比如电话,单位,邮件,都添加了一次
第二张图,系统自带的通讯录联系人的db数据库中的数据图:
第二张图就是第一张图在数据库中保存的数据。
数据是从33到62行的,45行数据不是空的,数据在data15的字段上保存的,由于屏幕大小问题后面的字段没有截全,但后面的字段除了data15表示联系人的图像,其他的完全看不懂。
在android系统自带的contact2.db数据库中有3个主要的表,分别是data,mimetypes,
raw-contacts,
data :该表负责保存各种联系人的数据等等
raw-contacts:该表能对数进行联系方面的过滤
mimetypes:该表能对数进行数据类别方面的过滤
在android4.0中mimetypes在数据库中的数据如下:

这里表示了数据的类别。
在data表中有几个重要的字段说一下:
Mimetype_id:这个字段表示这一行数据(确切的说是data1的数据)在mimetypes表中的数据类别id
raw_contact_id:这个字段表示这一行的数据(确切的说是data1的数据)是属于哪个联系人的。
Data1:这个字段存放所有的数据
Data2:这个表示data1中数据的具体类别,mimetypes中主要表示的大类别,比如是电话还是地址,邮件。而data2是对data1的进一步修饰比如单位电话,家庭电话。
目前已知的data2的值(只是指当mimetypes的大类别是电话号码的时候)及含义如下:
1:住宅电话
2:手机号
3:单位电话
5:住宅传真
6:寻呼机
7:其他
17:单位手机
18:单位寻呼机
19:助理
20:彩信
如果mimetypes的大类别不是电话号码就的另外分析了。其实从上面两张图经行比对也能看出来
如果data2是0的话,注意是0不是null,那么就是自定义的小类型
而data3就是自定义的小类型的名字,比如你该联系人添加一个“工作专用号”
那么这个data3中就存放这个 工作专用号
下面举个例子:
比如我们现在知道了,联系人的名字叫“wangwu”,这时候我们就可以通过raw-contacts表查询出这个联系人是第几个联系人,也就是raw-contacts表中的_id字段,即data表中的r
raw_contact_id字段,这个字段表示联系人的一个编号,那么该联系人的数据就和这个编号绑定了,通过这个编号就能找到 wangwu这个联系人的其他数据。
在mimetypes中表示电话号码的id是5,所以可以根据raw_contact_id,Mimetype_id,可以查询data1字段获得大类别下的数据,如果电话号码有好多,还需要按照上面的data2经行筛选,如果data2为0,则根据data3就行小内别的筛选。