Android:使用查找键管理联系人

11

我正在编写一款应用程序,可以保存草稿(使用android版本 >= 2.0)。每个草稿都通过 ContactsContract.Contacts.LOOKUP_KEY 与联系人相关联。

我的问题是,如果我更改联系人的名称,则查找键也会更改。这就是它的工作方式吗?

那么我需要查找键的目的是什么?我认为查找键永远不会变化,但现在它已经发生了变化。我对这种行为感到困惑...

有人能解释一下如何永久链接到联系人吗?我应该使用ID而不是查找键吗?

提前感谢。

2个回答

17

我的理解是查找键是一种结构化/分层键。因此严格来说,它可以更改,但仍然可以使用适当的方法找回您的联系人:

    Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
    Uri res = ContactsContract.Contacts.lookupContact(getContentResolver(), lookupUri);

是的,那似乎可以解决问题。不知何故我没有注意到 'ContactsContract.Contacts.lookupContact()' 方法。感谢您的答案。 - dotcs
1
我正在使用Android 2.2。我访问了联系人的查找键,它是0r12-2982324852,后来我更改了名称并保存了联系人,查找键变成了0r12-2982324852365430403C4638。因此,在Android 2.2中也是相同的,但当我向同一联系人添加电话号码时,查找键仍然保持不变为0r12-2982324852365430403C4638。所以我们可以得出结论,@BoD所说的是正确的。 - Gaurav Agarwal
我不明白链接如何可以是“永久的”。如果我在我的应用程序表中存储一个查找键,当名称和联系人ID更改时,如何使用此键检索联系人?查找键将不同,并且联系人URI也会更改,那么我如何在我的数据库中保存对此联系人的永久引用? - ThierryC

4

编辑:

为什么不使用原始联系人ID查找联系人ID或查找键?这是2.1版本中的错误。

未同步联系人的查找键基于联系人姓名。

http://comments.gmane.org/gmane.comp.handhelds.android.devel/130677

==================================================================

我还没有尝试,但我找到了一些关于此的信息。

http://developer.android.com/resources/articles/contacts.html

....

如果您的应用程序对性能有要求,则可能需要存储联系人的查找和长ID,并从这两个ID构建查找URI,如下所示:

Uri lookupUri = getLookupUri(contactId, lookupKey)

当URI中同时存在两个ID时,系统将首先尝试使用长ID。这是一个非常快速的查询。如果找不到联系人,或者找到的联系人具有错误的查找键,则内容提供程序将解析查找键并跟踪相关的原始联系人。如果您的应用程序批量处理联系人,则应维护两个ID。如果您的应用程序仅处理单个联系人,请不必费心存储长ID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接