通讯录数据共享类ContactsContract的学习

本文深入探讨Android通讯录数据共享机制,详细解读Contacts、ContactsContract及其数据模型(Data、RawContacts、Contacts),并通过命令行操作展示数据库结构及查询方法。

Android刚开始在通讯录数据共享方面提供的Contacts这个类,在SDK2.0发布后新加了一个ContactsContract,然后就不建议用Contacts这个旧的类了。

ContactsContact官方文档里面说它是基于一个三层的数据模型存储的,它是由三个主要的数据库组成的。这三个数据模型就是以ContactsContact.Data,ContactsContact.RawContacts,ContactsContact.Contacts。

  三个模型的功能大致为,

  Data:存储通讯录中每个人的全部信息,如名字,电话,E-mail等全在里面。

  RawContacts:这个里面是说存储的是个人描述信息和一些唯一确定的相关的帐号

  Contacts:这个是通讯录里面的描述同一个人的RawContacts集合。

用命令行下的adb  shell进入Android的模拟器,进入data/data目录下面,这里面就是安装的一些应用程序。找里面有一个com.android.providers.contacts,进入这个目录下,里面有一个databases,再进去就可以看到有个contacts2.db的文件。

  用sqlite3打开这个数据库文件。查看里面的表。里面表很多,像什么data,raw_contacts,contacts,minetypes等。

然后看一下DATA表的结构,用”.schema” 命令后会看到,类似如下的信息:

.schema data

CREATE TABLE data (

_id INTEGER PRIMARY KEY AUTOINCREMENT,

package_id INTEGER REFERENCES package(_id),

mimetype_id INTEGER REFERENCES mimetype(_id) NOT NULL,

raw_contact_idINTEGER REFERENCES raw_contacts(_id) NOT NULL,

is_primary INTEGER NOT NULL DEFAULT 0,

is_super_primary INTEGER NOT NULL DEFAULT 0,

data_version INTEGER NOT NULL DEFAULT 0,

data1 TEXT,

data2 TEXT,

data3 TEXT,

data4 TEXT,

data5 TEXT,

data6 TEXT,

data7 TEXT,

data8 TEXT,

data9 TEXT,

data10 TEXT,

data11 TEXT,

data12 TEXT,

data13 TEXT,

data14 TEXT,

data15 TEXT,

data_sync1 TEXT,

 data_sync2 TEXT,

 data_sync3 TEXT,

 data_sync4 TEXT );

data表中联系人的每一项数据,都会在 data 表产生一条记录。也就是说是短信数据、电话数据、Email等等都各自在data表中产生一条记录,然后依靠 mimitype_id 字段来区分区分。data1字段就存放了完整的数据,如果这个数据是由几个数据组合起来的,例如,姓名有FirstName 和 LastName。那么就往后存到 data2、data3 里面。组合起来的完整姓名就放在data1。data2也用来说明 data1。例如,如果是此记录记录的数据是电话号码,那么若是住宅电话,此字段为1;手机号码为2;单位电话为3......

搞清楚了data表的结构,我们就可以利用content provider提供的方法执行Inert,update,delete,query操作了。如这段代码就是通过联系人ID查找他的电话号码,电话类型,和电话标签。

Cursor c = getContentResolver().query(Data.CONTENT_URI,
          new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL},
          Data.CONTACT_ID + "=?" + " AND "
                  + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'",
          new String[] {String.valueOf(contactId)}, null);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值