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

Posted

技术标签:

【中文标题】Android:使用查找键管理联系人【英文标题】:Android: Manage contacts with lookup key 【发布时间】:2011-04-14 19:55:15 【问题描述】:

我目前正在编写一个允许保存草稿的应用程序(使用 android 版本 >= 2.0)。每个草稿都通过ContactsContract.Contacts.LOOKUP_KEY 连接到一个联系人。 我的问题是,如果我更改联系人的姓名,查找键也会更改。是这样的吗?

那么我需要查找键来做什么?我认为查找键永远不会改变,现在它无论如何都会改变。我对这种行为感到困惑......

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

提前致谢。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

是的,这似乎有效。不知何故,我没有注意到“ContactsContract.Contacts.lookupContact()”方法。谢谢你的回答。 我正在使用 Android 2.2。我访问了联系人的查找键,它是 0r12-2982324852,后来我更改了名称并保存了联系人,查找键是 0r12-2982324852365430403C4638。所以它对于 Android 2.2 也是一样的,但是当我将电话号码添加到同一个联系人查找键时,它仍然是相同的 0r12-2982324852365430403C4638。那么我们能否得出结论@BoD 所说的是正确的。 我不明白链接是如何“永久”的。如果我在我的应用程序表中存储了一个查找键,如果姓名和联系人 ID 更改,我如何使用此键检索联系人?查找键会有所不同,并且联系人 URI 也会发生变化,所以如何在我的数据库中保存对该联系人的永久引用??【参考方案2】:

已编辑:

为什么不使用原始联系人 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。

【讨论】:

以上是关于Android:使用查找键管理联系人的主要内容,如果未能解决你的问题,请参考以下文章

如何使用联系人 id 和查找键获取 rawcontact id

怎么添加android新建联系人

Android查找联系人怎么解决?

使用关键字在 Android 中选择联系人

查找包含非拉丁字符的联系人时搜索结果无效

检索特定联系人的所有详细信息