【发布时间】:2017-02-01 20:04:23
【问题描述】:
我正在创建一个 android 联系人应用程序,因此我会定期读取用户的联系人并将它们存储在我的应用程序中。为此,我需要依赖某种ID,以便我知道我应该在我的应用程序中更新(或添加/删除)哪个联系人,并且Contacts Provider 提供了其中的几个:
-
CONTACT_ID是聚合的联系人 ID, - 每个聚合联系人由一个或多个原始联系人组成,每个联系人都有自己的
RAW_CONTACT_ID, - 最重要的是,每个原始联系人都有一个
SOURCE_ID,它应该是服务器ID,即此联系人在此帐户服务器中的ID。
我选择依赖SOURCE_ID,因为这听起来是最稳定的。例如。当用户在他们的设备中删除并重新添加同一个帐户时,我不希望此帐户的联系人获得不同的 ID,因为我无法在我的应用中匹配它们。
然而,似乎只有 Gmail 同步适配器遵守了下面记录的承诺。不幸的是,Exchange 同步适配器没有,SOURCE_ID 发生变化,而且它绝对不是任何服务器 ID,因为它有一个像 23:4 这样的小数字。
问题:有什么想法可以解决这个问题吗?我是否将正确的ID 用于预期用途?交换适配器是否将“永久服务器 ID”存储在其他字段中?
文档:SOURCE_IDmust be unique for each account type and should be stable across syncs:
- 唯一:帐户的每个原始联系人都必须有自己的源 ID。如果您不执行此操作,则会导致联系人出现问题 应用。请注意,同一帐户类型的两个原始联系人 可能具有相同的源 ID。例如,原始联系人“Thomas Higginson”帐户 emily.dickinson@gmail.com 被允许 具有与原始联系人“Thomas Higginson”相同的源 ID 帐户 emilyd@gmail.com。
- 稳定:源 ID 是原始联系人在线服务数据的永久部分。例如,如果用户清除联系人存储 从应用程序设置和重新同步,恢复的原始联系人应该 具有与以前相同的源 ID。如果你不强制执行, 快捷方式将停止工作。
【问题讨论】:
标签: android android-contacts android-syncadapter