如何在ContactsContract.Contacts表上唯一标识联系人

时间:2017-07-17 14:20:03

标签: android android-contacts contactscontract

我有一个应用程序可以获取设备上联系人的ContactsContract.Contacts.LOOKUP_KEY并将其保存在应用程序Db上。

在阅读this页后,我认为我可以使用LOOKUP_KEY来唯一标识联系人,即使在编辑联系人时(例如在编辑联系人姓名后)。

实际上我在编辑了一个联系人后发现它的LOOKUP_KEY发生了变化,因此我无法再使用我保存在应用数据库中的LOOKUP_KEY

我的问题是:有没有办法在ContactsContract.Contacts上首次在设备上创建一个联系人,直到从设备上删除该联系人?

谢谢

2 个答案:

答案 0 :(得分:1)

每个名为_ID的联系人的行ID(主键)。

答案 1 :(得分:1)

LOOKUP_KEY本身不能用作密钥,而应与联系人的_ID一起使用,以形成完整的lookupUri

然后可以使用lookupUriCONTENT_LOOKUP_URI表中查找联系人。 CONTENT_LOOKUP_URI基本上首先按_ID查找联系人,如果找不到,或_ID似乎是错误的联系人,则使用提示 LOOKUP_KEY部分尝试为您找到正确的联系人。

来自CONTENT_LOOKUP_URI

  

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

     

只要联系人的行ID保持不变,此URI就是   相当于CONTENT_URI。如果联系人的行ID因此而改变   对于同步或聚合,此URI将使用查找联系人   间接信息(同步ID或组成原始联系人)。

     

查找键应该是未编码的 - 它存储在编码中   表单,可以在URI中使用。

来自getLookupUri(long contactId, String lookupKey)

  

使用给定的_ID和/来构建CONTENT_LOOKUP_URI查找Uri   LOOKUP_KEY。

来自LOOKUP_KEY

  

包含提示的不透明值,了解如何查找联系人   由于同步或聚合,行ID已更改。