Android中联系人和通话记录详解(2)

  在文章Android中联系人和通话记录详解(1)中对通话记录进行了分析,本章将对联系人的数据库表、字段以及Insert,Query,Delelte,Update四大基本数据操作进行分析。

  与联系人相关的主要的表总共有四个:contacts,data,mimetypes,raw_contacts。

contacts表的字段和外键关系:

Android中联系人和通话记录详解(2)_第1张图片

Android中联系人和通话记录详解(2)_第2张图片

  在这个表中,简单的存储了联系人的一些信息,最主要的外键关系是字段name_raw_contact_id对应着表raw_contacts表中的字段_id。

data表的字段和外键关系:

  data表中存储着联系人的详细数据,最主要的外键关系是字段raw_contact_id对应着表raw_contacts的字段_id,字段mimetype_id对应着表mimetype的字段_id,通过这些外键关系,可以找到每一个联系人的多种类别(邮件、电话,姓名等等)对应的数据。表中的data1字段主要存储具体的数据(电话号码,邮件地址,姓名等等);data2主要存储类型;当是图片的时候,data15字段存储着图片的二进制数据,所以可以直接读取图片。

mimetypes表的字段和字段值:


  这张表中的字段表示与联系人相关的数据分类,也是data表中存储的数据的分类,它们分别是:

vnd.android.cursor.item/email_v2:邮件,vnd.android.cursor.item/im:即时消息,vnd.android.cursor.item/nickname:昵称,vnd.android.cursor.item/organization:组织机构,vnd.android.cursor.item/phone_v2:电话,

vnd.android.cursor.item/sip_address:sip地址,vnd.android.cursor.item/name:名字,vnd.android.cursor.item/postal-address_v2:邮政地址,vnd.android.cursor.item/identity:身份,vnd.android.cursor.item/photo:照片,

vnd.android.cursor.item/group_membership:群组成员关系。

  每一个类别都是一对多的数据关系,比如vnd.android.cursor.item/name(名字)有 display_name,given_name,family_name等等。

raw_contacts表的字段和外键关系:


  这个表示联系人存储数据的核心表,每一个联系人都对应着表中的一条数据。其中字段version(版本),每个联系人的数据修改一次,version就会变化一次(加1),所以可以判断version是否改变来监听联系人数据的变化;字段delete(删除),默认为0,如果是1表示这行数据已经删除。这个表中的_id字段是关键,通过它可以在data表中查询联系人的电话、姓名、邮箱等信息。

  上面相关联系人的表关系已经基本清楚,下面分析联系人的名字,邮件,电话等等这种一对多的数据是怎样存储的。在表mimetypes中,提供了11中联系人存储的数据类别,通过分析,在类com.provider.ContactsContract.CommonDataKinds中查找到了每一个类别拥有的字段。

下面为每一个类别的具体字段的分析:

邮箱(Emial mimetype=vnd.android.cursor.item/email_v2)


即时消息(IM mimetype=vnd.android.cursor.item/im)

昵称(Nickname mimetyp=vnd.android.cursor.item/nickname)

电话号码(Phone mimetype=vnd.android.cursor.item/phone_v2)

Android中联系人和通话记录详解(2)_第3张图片

名字(StructuredName mimetype=vnd.android.cursor.item/name)

Android中联系人和通话记录详解(2)_第4张图片

Android中联系人和通话记录详解(2)_第5张图片

  在这里就只简单分析上面几个类别,还有邮政(StrcturedPostal mimetype=vnd.android.cursor.item/postal-address_v2),组织(Organization mimetype=vnd.android.cursor.item/organization)等等类别,也可以在com.provider.ContactsContract.CommonDataKinds类中找到。

  到目前为止,联系人的数据是怎样用表存储的以及用哪些字段存储的,已经基本明白。那么,下一章将对联系人的数据操作(Insert,Query,Update,Delete)进行分析。

你可能感兴趣的:(android,详解,联系人)