如何确定联系人数据库中的哪一行已更新

时间:2010-12-08 00:34:12

标签: android

我正在编写备份应用程序,需要知道联系人数据库中的哪些记录已更新,以便我只能备份这些记录。我查看了文档,似乎在ContactsContract.RawContacts类中有一个“DIRTY”常量字段,对于更新的行,应该设置为“1”。但我不清楚这个字段什么时候会被清除为“0”。有人可以提供关于如何使用它的示例代码吗?此字段是否可用于确定是否已添加或更新联系人? 如果这不是实现我想要做的正确方法,那么任何人都可以建议我另一种方式。我也知道我可以使用RegisterContentObserver()调用来识别Contacts数据库中何时发生更改,但这将要求我的应用程序始终在后台运行,这太昂贵而且我不想这样做那。 如果无论如何都要在添加或更新各种联系人时提取时间戳也是完美的,但我找不到如何做到这一点。 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

  

我查看了文档,似乎在ContactsContract.RawContacts类中有一个“DIRTY”常量字段,对于更新的行,应该设置为“1”。但我不清楚该字段何时会被清除为“0”。

根据我的经验,只要有某种“脏”指示符,备份/同步应用程序就有责任在备份/同步操作期间成功提交数据后重置它。

但是,当使用多个应用程序时,这可能会导致问题 - 数据更新后的任何时间运行的第一个应用程序将重置标志,下一个应用程序将找不到任何要备份/同步的应用程序。

在这种情况下,如果您要求用户能够使用“同步”应用程序(例如),但您还希望进行“备份”操作,那么注册ContentObserver将有更好的用途,并且没有理由如果正确实施,这应该是资源“昂贵”。

编辑:虽然没有'时间戳',但有一个'VERSION'字段被更新(即'DIRTY'设置时)。如果您备份此字段,则可以简单地设置“DIRTY”标志,并将联系人数据库中的当前VERSION与您最近的备份进行比较。