谷歌联系人分了三部分:contacts、 rawcontacts、data
每次新增一个contact之前都需要在rawcontact表中添加一条空白记录,然后才能插入到contact表中,contact所有的数据属性都保存在data里。
每次修改一条contact,对应rawcontact的属性里有一个version字段,修改完成后version+1,所以我们可以通过判断比较version的大小来确定联系人是否被修改。
对于新增和删除的方法目前还没想到比较好的,只能通过比较系统联系人是否在自己的数据库里存在来判断是否添加;
对于删除,rawcontact里面有个DELETED字段,但是没搞明白怎么用的,所以目前还没研究到好办法~~
//查找contact所有联系人
Cursor cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null,
null, null, null);
while (cursor.moveToNext()) {
//获取某一联系人的contactId
String contactId = cursor
.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
String dn = cursor
.getString(cursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.v("DISPLAY NAME", dn);
// 根据contactId查询对应的RawContacts,这个里面有版本号version,关键字段
Cursor raws = getContentResolver()
.query(
ContactsContract.RawContacts.CONTENT_URI,
null,
ContactsContract.RawContacts.CONTACT_ID
+ " = ?",
new String[] { contactId, },
null);
while (raws.moveToNext()) {
String rawVersion = raws
.getString(raws
.getColumnIndex(ContactsContract.RawContacts.VERSION));
String contactIdRaws = raws
.getString(raws
.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID));
//rawcontact里面有个deleted字段,目前还不知道怎么用
String deleted = raws
.getString(raws
.getColumnIndex(ContactsContract.RawContacts.DELETED));
if(rawVersion != null){
Log.v("RAW VERSION", rawVersion);
}
if(contactIdRaws != null){
Log.v("RAW CONTACT ID", contactIdRaws);
}
if(deleted != null){
Log.v("RAW DELETED", deleted);
}
}
raws.close();