我正在开发一个 Android 应用程序,它需要知道何时添加/更新/删除联系人。
所以我读了几篇文章。据我所知,每当联系人发生更改时,我们都可以通过内容观察者收到通知,但我们无法获取已添加/更新/删除的联系人。因此,我阅读了官方 API 并准备了如何捕获该特定联系人的设计。
所以我一开始是这么想的
- 我们将存储所有联系人Is、删除标志和版本
- 每当联系人发生变化时,我都会从 Android 系统获取表的行数和行数。
- 如果我的行计数小于系统行计数,则联系人已被删除。
- 如果我的行计数大于系统行计数,则已添加联系人。
- 如果情况并非如此,则其中一个联系人版本已更改。
我还了解到,如果用户删除了联系人,Android 不会删除该联系人,但它会在已删除标志上设置 0。因此在这些情况下行数将相同。
Android 还会多次更改联系人的行 ID,如官方文档中所述。那么我们如何才能像查找 uri 一样唯一地识别它们,如果不能,那么我们也必须为其设置观察者。
所以我想知道上面的说法是否正确?在添加联系人的情况下,它是否会添加到光标的最后一行意味着如果我检查系统数据库的最后一行是否有联系人,它是否会给我添加的联系人。
让我尽可能解释一下。基本上你的政策看起来不错,但实际上比你想象的要复杂一些。
在安卓上,一个联系人可以与多个相关联raw联系人 http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html,可能由许多数据提供商提供,例如 Google、Facebook、Skype 等。例如,如果您的本地联系人中的一位朋友也在使用 Skype,则有两个原始联系人分别存在于ContactContracts.RawContacts http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html,但它们会自动聚合,并在您查询时显示为一个联系人ContactsContract.Contacts http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html.
这也是为什么很难唯一地识别联系人的原因,因为随时都可以。LOOKUP_KEY
对于这种情况不太方便。
除 Google 之外的许多应用程序仅提供单向同步,i.e.仅从服务到联系人,因此它们是只读的。在这种情况下,删除标志将不会被使用,而是在同步过程中被删除。因此,你不能简单地依赖标志。
尽管没有一个好的简单解决方案,但我想如果您观察特定的情况,实现您想要的目标会容易得多RawContacts
, not Contacts
。希望这有助于您的理解。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)