1

我正在开发适用于 Android 的应用程序,并且需要存储联系人 ID,以便跟踪要在应用程序中使用的联系人子集。我目前将 ID 存储在本地使用的表中,但是如果联系人与其他联系人合并(用于表示合并联系人的 ID 经常更改),则此表会变得不一致。保持一致性的最佳方法是什么?

我的想法:

  • 如果有某种意图或系统事件被广播,那么我可以监听它。

  • 如果旧 ID 和新 ID 之间的映射保存在某处(ContactsContract.RawContacts?),那么只要检测到 ID 不再有效,我就可以刷新该字段。

  • 使用内容观察者运行后台进程并观察变化。如果可能的话,我想避免这种情况。

这个问题似乎解决了类似的问题,但用于添加而不是合并联系人:Reacting to new contacts in Android Contacts application

欢迎任何和所有想法!

4

1 回答 1

0

存储联系人查找 URI(作为字符串)。此 URI 是_id与联系人一起创建的lookup_key。这两个可以通过调用 ContactsContract.getLookupUri() 来构建查找 URI。您可以通过调用 ContactsContract.lookupContact() 并查询CONTENT_URICONTENT_LOOKUP_URI直接使用查找 URI 查询来查找联系人。Android 文档对 CONTENT_LOOKUP_URI 这么说:

此表的 content:// 样式 URI,应用于创建快捷方式或以其他方式创建联系人的长期链接。此 URI 后应始终跟一个“/”和联系人的 LOOKUP_KEY。它还可以选择附加一个“/”和最后一个已知的联系人 ID。这种“完整”格式是一项重要的优化,强烈推荐。

只要联系人的行 ID 保持不变,此 URI 就等同于 CONTENT_URI。如果联系人的行 ID 由于同步或聚合而发生更改,则此 URI 将使用间接信息(同步 ID 或组成原始联系人)查找联系人

查找键应附加未编码 - 它以编码形式存储,准备在 URI 中使用。

于 2012-08-23T18:29:17.853 回答