唯一联系人 ID

Posted

技术标签:

【中文标题】唯一联系人 ID【英文标题】:Unique Contact ID 【发布时间】:2012-08-31 13:43:42 【问题描述】:

android 是否为每个联系人分配唯一的常量 ID? 如果没有,有没有办法将这些信息分配给他们? 我可以将此 ID 同步到 Google 通讯录吗?

谢谢。

【问题讨论】:

【参考方案1】:

您只能检索已同步的 Google 联系人的唯一 ID。在其他情况下,您可能会得到不同的 id,如 Android 中每个联系人的 raw_id 都会在用户重置或重新导入电话簿时更改。

如果您希望联系人 ID 的一致性与设备、平台无关,则要么仅使用同步的 Google 联系人,要么编写您自己的代码来生成唯一 ID,例如获取很少更改的联系人号码、姓名等的哈希

【讨论】:

【参考方案2】:

android 联系人中有两种类型的联系人 ID。

一个是 CONTACT_ID,另一个是 RAW_CONTACT_ID

请参阅本教程。 ANDROID CONTACTS

希望这会对你有所帮助。

【讨论】:

但如果我将这些 ID 同步到与我的谷歌帐户相关联的其他设备,我认为这些 ID 不会保持不变。有没有办法将用户定义的数据与我的 Google 联系人同步? 当然不是。它只是 android 设备中的唯一 ID。 这并没有回答这个问题:android 是否为每个联系人分配唯一的常量 ID?是还是不是?【参考方案3】:
ContactsContract.RawContacts    SOURCE_ID

唯一标识此原始联系人的字符串值 创建它的帐户

当同步适配器创建新的原始联系人时,此列应为 设置为原始联系人的服务器唯一 ID。当一个安卓 应用程序创建一个新的原始联系人,应用程序应该离开 此栏为空。这向同步适配器发出信号,它应该创建 服务器上的新原始联系人,并获取 SOURCE_ID 的值。在 特别是,对于每种帐户类型,源 ID 必须是唯一的,并且 跨同步应该是稳定的:

唯一:帐户的每个原始联系人都必须有自己的来源 ID。 如果您不执行此操作,则会导致联系人出现问题 应用。请注意,同一帐户类型的两个原始联系人 可能具有相同的源 ID。例如,原始联系人“Thomas Higginson”帐户 emily.dickinson@gmail.com 被允许 具有与原始联系人“Thomas Higginson”相同的源 ID 帐户 emilyd@gmail.com。稳定:源 ID 是 原始联系人的在线服务数据。例如,如果 用户从应用程序设置中清除联系人存储并重新同步, 恢复的原始联系人应具有与以前相同的源 ID。如果 如果您不强制执行此操作,快捷方式将停止工作。

这里是官方文档:Contacts Provider

【讨论】:

【参考方案4】:

有 LOOKUP_KEY 列正是为此目的。

虽然文档很少,但在新安装和不同手机之间似乎一直存在。

文档:LOOKUP_KEY

【讨论】:

我认为这并不准确,从我的实验来看,联系人更新的关键更改似乎是这样。它也是一个组合键,因此如果联系人获取与 Skype 联系人合并,例如,键将更改。 是的,它是合成的,但它的部分保持不变。您可以使用零件之间的点将其拆分并再次匹配零件。你是如何编辑联系人的?更改时,姓名号码和邮件查找对我来说保持不变......

以上是关于唯一联系人 ID的主要内容,如果未能解决你的问题,请参考以下文章

获取 Android 手机联系人的跨设备唯一 ID

Android 手机联系人是不是有唯一标识符?

sqlite中如何通过外键关联两个数据库?

Android:获取从通话记录中调用的唯一联系人

面向对象联系(定义mysql类)

从安卓手机获取匹配的联系人邮箱和手机