在Android中获取更新的联系人以进行联系人同步

17

我正在Android上开发联系人同步功能,并且已经成功完成了首次联系人同步。

以下是我的具体步骤: 1. 获取所有联系人,并使用 Contact._ID 将每个联系人保存在数据库中。 2. 获取名称和电话号码并保存在数据库中。

之后,我会将我的联系人数据发送到服务器,以便服务器进行更新。

现在的问题是如何检查特定联系人是否已更新?

我已经实现了广播接收器,以便我的应用程序可以得到关于联系人的更新/添加/删除的通知。但是我想跟踪特定联系人。

我找到了一个解决方案,即“Dirty Flag”。它告诉我们该联系人是否已更新。以下是参考链接:http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html

但是我无法使用这个“Dirty Flag”。请问是否有人能帮我实现“Dirty Flag”?

先行致谢!


为什么你不能使用它? - pskink
你有解决方案吗?我在我的应用程序中遇到了同样的问题。 - Bhoomi Zalavadiya
4个回答

5

联系人应具有值ContactsContract.RawContacts.VERSION

如果您在服务器上(或在应用程序中的数据库中)保存此版本,则可以确定联系人自上次发送到服务器以来是否已更改。


2
对此有任何评论吗?我仍在寻找完美的解决方案。 - Gaurav Singla
1
不好意思,我得先亲自尝试一下,但目前我没有时间。 - tknell

4

你可以使用SQLite数据库来存储带有时间戳的联系人信息,并且可以进行某种比较和更新表格的操作。尝试一下这种方式。 - Jithu P.S
3
每当您进行电话并且没有修改联系人中的任何字段时,Android会自动将CONTACT_LAST_UPDATED_TIMESTAMP的值更新为通话时间,这是错误的。 - Deepak Sharma
它还取决于系统时间,因此无论何时更改设备的日期和时间,都会影响CONTACT_LAST_UPDATED_TIMESTAMP的值。 - Bhoomi Zalavadiya
有什么进展吗?我过去3个月一直在尝试同步联系人,真的需要帮助。使用CONTACT_LAST_UPDATED_TIMESTAMP不好。由于某些非常奇怪的原因,Android会无缘无故地更新联系人时间戳!上次我甚至打电话给这些联系人是几年前的事了。请给予建议。#AndroidIsTheWorst - epic

3

当我使用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列仅出现在API 18(最新的Jelly Bean版本)中,因此我只需更改我的Gradle文件来解决这个问题。

1
CONTACT_LAST_UPDATED_TIMESTAMP在每次调用时更新的答案怎么样?你是如何处理这个问题的? - Gaket
分享Gaket问题。CONTACT_LAST_UPDATED_TIMESTAMP的更改有许多其他未知原因。 - epic

2
正如你所说,你在本地数据库中存储了Contacts._ID并从Contacts数据库中获取与联系人相关的电话号码和其他信息。
我建议您将RawContacts表中的数据存储到本地映射中,并检查与联系人关联的条目中的raw_contact_id。在data表格中,您可以轻松地获取所有联系人的信息。
要检查修改或删除的联系人,请使用您本地表中存在的raw_contact_id检查与data表的映射,以查看与raw_contact_id'sversion相关联的联系人字段是否已更改或isDeleted字段是否已更改(即:联系人已从联系人应用程序中删除)。

1
请问您能否提供一个例子? - Bhoomi Zalavadiya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接