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

标签 android

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

最佳答案

I have looked at the documentation and it seems that there is a "DIRTY" constant field in ContactsContract.RawContacts class, which is supposed to be set to "1", for the rows that are updated. But it is not clear to me as to when will this field get cleared to "0".

根据我的经验,每当出现某种“脏”指示器时,一旦在备份/同步操作期间成功提交数据,备份/同步应用程序就会负责重置它。

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

在这种情况下,如果您要求用户能够使用“同步”应用程序(例如),但您还希望进行“备份”操作,那么注册 ContentObserver 会达到更好的目的,没有理由不这样做如果正确实现,这对资源来说应该是“昂贵的”。

编辑: 虽然没有“时间戳”,但有一个更新的“版本”字段(在设置“脏”时)。如果您备份此字段,您只需保留“脏”标志设置并将联系人数据库中的当前版本与您最近的备份进行比较。

关于android - 如何确定联系人数据库中的哪一行已更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4383146/

相关文章:

java - 在 GridLayout 中创建自定义删除键

Java,根据所选州获取城市

android - 如何在显示消息后取消 EditText 的文本更改?

java - 如何以编程方式在Android中制作水平线

android - 动画透明GIF图像

android - 如何在 android 中使用 xml 布局进行绘制

android - Android 2D 游戏使用 Canvas 还是 OpenGL ES2?

android - FragmentPagerAdapter - 当用户转到新标签时如何检测滑动或标签点击?

android - Android 复选框条件下的删除线 TextView ?

android - 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) base.apk