gpt4 book ai didi

java - 了解 Android 联系人的架构

转载 作者:IT老高 更新时间:2023-10-28 23:10:32 24 4
gpt4 key购买 nike

我正在开发一个需要知道何时添加/更新/删除联系人的 Android 应用。

所以我为此阅读了几篇文章。我知道每当联系人发生更改时,我们都可以通过内容观察者获得通知,但我们无法获取已添加/更新/删除的联系人。因此,我已经阅读了官方 API,并准备了如何捕获该特定联系人的设计。

我一开始的想法

  1. 我们将存储所有联系人 ID、已删除标志和版本
  2. 每当联系人发生变化时,我都会从 Android 系统获取我的表格的行数和行数。
  3. 如果我的行数小于系统行数,则表示已删除联系人。
  4. 如果我的行数大于系统行数,则已添加联系人。
  5. 如果不是这些情况,则其中一个联系人版本已更改。

我还了解到,如果联系人被用户删除,Android 不会删除该联系人,但它会将已删除标志设置为 0。所以在这些情况下,行数将是相同的。

Android 还会多次更改联系人的行 ID,如官方文档中所述。那么我们如何才能像查找 uri 一样唯一地识别它们,如果不是,那么我们也必须为此设置观察者。

所以我想知道以上是否正确?在添加联系人的情况下,是否会将其添加到光标的最后一行,这意味着如果我检查系统数据库的最后一行是否有联系人,它是否会给我添加的联系人。

最佳答案

让我尽可能多地解释。基本上你的策略看起来不错,但实际上它比你想象的要复杂一些。

在 Android 上,一个联系人可以关联多个 raw contacts ,可能由许多数据提供商提供,例如 Google、Facebook、Skype 等。例如,如果您本地联系人中的一位 friend 也在使用 Skype,则 ContactContracts.RawContacts 中分别存在两个原始联系人。 ,但当您查询 ContactsContract.Contacts 时,它们会自动聚合并显示为一个联系人.

这也是为什么很难唯一识别联系人的原因,因为 you can split or join them随时都可以。 LOOKUP_KEY 对于这种情况不是很方便。

除 Google 之外的许多应用程序仅提供单向同步,仅从服务到联系人,因此它们是只读的。在这种情况下,删除的标志将不会被使用,并且在它们的同步过程中被简单地删除。因此,您不能简单地依赖标志。

虽然没有一个好的简单解决方案,但我想如果您观察特定的 RawContacts 而不是 Contacts,那么实现您想要的会容易得多。希望这有助于您的理解。

关于java - 了解 Android 联系人的架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15812967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com