首页 > 解决方案 > 如果原生联系人应用程序中的任何联系人发生变化,Truecaller、Messenger 等应用程序如何与原生联系人应用程序保持同步

问题描述

我观察到,如果我们在本机联系人应用程序中更新/删除联系人,相同的更改会立即反映到 TrueCaller 中。

我可以想到两种方式来获得改变:

  1. 它通过删除应用程序中的所有现有条目来刷新整个联系人列表,并在每次应用程序进入前台时使用联系人提供程序从本机联系人中查询所有条目。但是这种方法可能涉及在每次启动时查询 RawContact 表和数据表。(这在计算方面可能是昂贵的)
  2. 每个原始联系人都维护VERSION,如果通过本机应用程序对原始联系人进行任何更改,则该版本会递增。这可以用于修改,但需要维护 truecaller(或类似应用程序)中的旧值,以便我们可以比较。这种方法仍然需要您查询 RawContacts 表。

后一种方法还需要在 TrueCaller 应用程序数据库上维护版本。

需要执行以下操作来检测任何更改:

  1. 如果版本低于原生联系人数据库中的原始联系人版本,则检查TrueCaller中原始联系人的版本,然后查询相应的数据表以获取所有更改。
  2. 如果从本机删除任何原始联系人,那么它要么从 RawContact 表中删除,要么标记为Deleted。因此,我们需要检查已删除标志或 RawContact 表中是否缺少任何先前的 RawContact 条目。
  3. 添加新联系人等其他情况,因此将在 RawContact 表中找到新的原始联系人条目等。

如果在本机应用程序中执行任何诸如添加,删除或修改等操作,是否有更好的方法可以在您的应用程序中导入联系人并保持适当的同步?

当然,像 TrueCaller 这样的应用程序在这方面做得很好。任何关于进口联系人等任何相关来源的文章将不胜感激。

标签: androidandroid-contacts

解决方案


由于诸如此类的应用程序TrueCaller是封闭源代码,因此无法给您明确的答案,但是选项 2 将是我管理与设备联系人同步的行动方案。

您可以添加到 that将ContentObserverContactsContract ContentProvider发生更改时调用您的代码,以便您可以在选项 2 处运行建议的代码,但请注意联系人往往会非常非常频繁地更改,因此如果需要,我会限制此类后台同步每天一次,以防止占用电池/CPU。


推荐阅读