【问题标题】:Get Updated Contacts in Android for Contact Sync在 Android 中获取更新的联系人以进行联系人同步
【发布时间】:2015-07-01 04:01:30
【问题描述】:

我正在使用 Android 中的联系人同步,并且我已经成功完成了首次联系人同步。

这就是我正在做的事情。 1. 获取所有联系人并使用 Contact._ID 将每个联系人保存在数据库中 2. 获取姓名和电话号码并保存在数据库中。

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

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

我已经实现了广播接收器,以便我的应用可以了解联系人的更新/添加/删除。但我想追踪特定的联系人。

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

但是我不能使用这个脏标志,有人可以通过实现脏标志来帮助我。

提前致谢!

【问题讨论】:

  • 为什么不能使用?
  • 你有解决办法吗?我在我的应用程序中遇到了同样的问题

标签: android android-intent android-contacts contact


【解决方案1】:

联系人的值应为ContactsContract.RawContacts.VERSION

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

【讨论】:

  • 有这方面的 cmets 吗?我仍在寻找完美的解决方案。
  • 不,抱歉。我必须自己尝试一下,但我目前没有时间。
【解决方案2】:

您将使用以下查询从联系人数据库中获取特定时间后更新的联系人数量。

 ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP 

,尝试将上次上传到服务器的时间与这次比较。希望在成功上传到服务器后,您会得到更新的联系人列表。

检查这个 http://developer.android.com/reference/android/provider/ContactsContract.ContactsColumns.html#CONTACT_LAST_UPDATED_TIMESTAMP

【讨论】:

  • 您可以使用sqlite数据库存储带有时间戳的联系人。您可以进行某种比较和更新表格..尝试这种方式
  • 有一个问题,每当你拨打任何电话并且没有修改联系人中的任何字段时,android都会自动将CONTACT_LAST_UPDATED_TIMESTAMP的值更新为通话时间,这是错误的
  • 这也取决于系统时间,所以每当您更改设备的日期和时间时,它也会影响 CONTACT_LAST_UPDATED_TIMESTAMP 的值
  • 运气好吗?我正在尝试同步过去 3 个月的联系人,并且确实需要一些帮助。使用 CONTACT_LAST_UPDATED_TIMESTAMP 不好。出于某种非常奇怪的原因,android 会无缘无故地更新联系人时间戳!上次我什至打电话给这些联系人是几年前。请指教。 #AndroidIsTheWorst
【解决方案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文件。

【讨论】:

  • 每次通话都会更新 CONTACT_LAST_UPDATED_TIMESTAMP 的答案是什么?你是怎么做的?
  • 分享 Gaket 问题。 CONTACT_LAST_UPDATED_TIMESTAMP 更改有许多其他未知原因。
【解决方案4】:

正如您所说,您将Contacts._ID 存储在本地数据库中,并从Contacts 数据库中获取phone number 和其他与联系人相关的信息。

我建议您将RawContacts 表中的数据存储到本地映射中,并检查data 联系人表中与raw_contact_id 关联的条目,您将轻松获得所有联系人。

查看修改或删除的联系人 使用本地表中存在的raw_contact_id 检查与data 表的映射,如果与raw_contact_id's 关联的联系人字段versionisDeleted 字段已更改(即;联系人已从联系人应用程序中删除)

【讨论】:

  • 你能举个例子吗?
猜你喜欢
  • 2016-09-17
  • 1970-01-01
  • 2016-10-08
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多