android - 如果原生联系人应用程序中的任何联系人发生变化,Truecaller、Messenger 等应用程序如何与原生联系人应用程序保持同步
问题描述
我观察到,如果我们在本机联系人应用程序中更新/删除联系人,相同的更改会立即反映到 TrueCaller 中。
我可以想到两种方式来获得改变:
- 它通过删除应用程序中的所有现有条目来刷新整个联系人列表,并在每次应用程序进入前台时使用联系人提供程序从本机联系人中查询所有条目。但是这种方法可能涉及在每次启动时查询 RawContact 表和数据表。(这在计算方面可能是昂贵的)
- 每个原始联系人都维护VERSION,如果通过本机应用程序对原始联系人进行任何更改,则该版本会递增。这可以用于修改,但需要维护 truecaller(或类似应用程序)中的旧值,以便我们可以比较。这种方法仍然需要您查询 RawContacts 表。
后一种方法还需要在 TrueCaller 应用程序数据库上维护版本。
需要执行以下操作来检测任何更改:
- 如果版本低于原生联系人数据库中的原始联系人版本,则检查TrueCaller中原始联系人的版本,然后查询相应的数据表以获取所有更改。
- 如果从本机删除任何原始联系人,那么它要么从 RawContact 表中删除,要么标记为Deleted。因此,我们需要检查已删除标志或 RawContact 表中是否缺少任何先前的 RawContact 条目。
- 添加新联系人等其他情况,因此将在 RawContact 表中找到新的原始联系人条目等。
如果在本机应用程序中执行任何诸如添加,删除或修改等操作,是否有更好的方法可以在您的应用程序中导入联系人并保持适当的同步?
当然,像 TrueCaller 这样的应用程序在这方面做得很好。任何关于进口联系人等任何相关来源的文章将不胜感激。
解决方案
由于诸如此类的应用程序TrueCaller
是封闭源代码,因此无法给您明确的答案,但是选项 2 将是我管理与设备联系人同步的行动方案。
您可以添加到 that将ContentObserver
在ContactsContract
ContentProvider
发生更改时调用您的代码,以便您可以在选项 2 处运行建议的代码,但请注意联系人往往会非常非常频繁地更改,因此如果需要,我会限制此类后台同步每天一次,以防止占用电池/CPU。
推荐阅读
- reactjs - 为什么函数调用在控制台中给我错误?
- mongodb - 如何在 Typescript 中加载 dotenv
- macos - VSCode 键盘快捷键 option + shift + f 和 option + z 不起作用,在 macos catalina 上打印特殊字符
- c - 如果满足某个条件,则定义一个结构
- python - 如何在熊猫中将逗号分隔值转换为整数
- python - 如何在 windows powershell 中安装 virtualenv
- python-3.x - 为什么我的附加列表被覆盖我的意思是前面的附加元素正在改变?我能知道为什么
- autosys - Python Autosys 自动化
- node.js - Bull Queue如何进行无限尝试?
- reactjs - Serviceworker - WorkBox v3.5 在 CRA 中“找不到注入清单的地方”