我正在使用Android中的Contact Sync,我已经成功完成了首次使用Contact Sync。
这是我正在做的事情。 1.使用Contact._ID获取所有联系人并将每个联系人保存在DB中 2.获取姓名和电话号码并保存在DB中。
之后我将联系人数据发送到服务器,以便更新服务器。
现在问题是如何检查我的特定联系人是否更新?
我已经实施了广播接收器,以便我的应用可以了解联系人的更新/添加/删除。但是我想要特别联系。
我找到了一个解决方案,即Dirty Flag。它告诉我们联系人是否更新,这是参考链接:http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html
但我无法使用这个脏旗,有人可以通过实施脏旗帮助我。
提前致谢!
答案 0 :(得分:5)
联系人的值应为ContactsContract.RawContacts.VERSION
。
如果您将此版本保存在服务器上(或应用程序的数据库中),则可以确定联系人自上次发送到服务器后是否已更改。
答案 1 :(得分:4)
您将使用以下查询从联系人数据库获取特定时间后更新的联系人数量。
ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP
,尝试将上次上传的时间与您的服务器进行比较。希望您在成功上传到服务器后获得更新的联系人列表。
答案 2 :(得分:2)
正如您所说,您正在本地数据库中存储Contacts._ID
并从phone number
数据库中获取Contacts
以及与联系人相关的其他信息。
我建议您将RawContacts
表中的数据存储到本地映射中,并检查与raw_contact_id
联系人表中的data
相关联的条目,这样您将获得所有联系人容易。
检查修改或删除的联系人
使用本地表格中的raw_contact_id
检查与data
表的映射,如果与raw_contact_id's
version
关联的联系人字段已更改或isDeleted
字段已更改(即联系人已从联系人申请中删除)
答案 3 :(得分:2)
当我这样做时,我使用了ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP,但我有点问题是它是毫秒,我使用一列来获取新文件,它是以秒为单位(MediaStore.MediaColumns.DATE_ADDED)所以要注意使用正确的数字。
Uri uri = ContactsContract.Contacts.CONTENT_URI;
Cursor cursorNew;
cursorNew = contentResolver.query(uri,
null,
ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP + ">=?",
new String[]{lastUpdate},
null // Ordering
);
'lastUpdate'是一个带有我的时间戳
的字符串另一件需要注意的事情是,Contact的专栏刚刚出现在最新的Jelly Bean版API 18上,所以为了解决这个问题,我只是改变了我的gradle文件。