2010-12-08 65 views
2

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

+0

user887304您是如何解决您的问题的? – rakesh 2014-01-05 10:32:27

回答

0

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

以我的经验,每当有某种形式的“脏”指标,它是备份/同步应用程序的责任重置一旦数据备份/同步操作过程中已成功提交。

但是,当使用多个应用程序时 - 第一个在数据更新后随时运行将重置该标志,而下一个应用程序不会找到任何要备份/同步的内容。

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

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

+0

非常感谢您的回复。我将检查“VERSION”字段的更改。这似乎比注册ContentObserver更简单。 – AnilV 2010-12-08 06:05:27

相关问题