我目前正在编写一个允许保存草稿的应用程序(使用 android 版本 >= 2.0)。每个草稿都通过 连接到一个联系人ContactsContract.Contacts.LOOKUP_KEY
。我的问题是,如果我更改联系人的姓名,查找键也会更改。这是这样的吗?
那么我需要一个查找键来做什么?我认为查找键永远不会改变,现在它无论如何都会改变。我对这种行为感到困惑......
有人可以向我解释如何永久链接到联系人吗?我应该使用 ID 而不是查找键吗?
提前致谢。
我目前正在编写一个允许保存草稿的应用程序(使用 android 版本 >= 2.0)。每个草稿都通过 连接到一个联系人ContactsContract.Contacts.LOOKUP_KEY
。我的问题是,如果我更改联系人的姓名,查找键也会更改。这是这样的吗?
那么我需要一个查找键来做什么?我认为查找键永远不会改变,现在它无论如何都会改变。我对这种行为感到困惑......
有人可以向我解释如何永久链接到联系人吗?我应该使用 ID 而不是查找键吗?
提前致谢。
据我了解,查找键是结构化/分层键。因此,严格来说,它可以改变,但仍可用于通过使用适当的方法找回您的联系人:
Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
Uri res = ContactsContract.Contacts.lookupContact(getContentResolver(), lookupUri);
编辑:
为什么不使用原始联系人 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。