您的位置:首页 > 其它

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

2011-11-02 20:44 176 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: