使用查找键获取联系人会给出意外的 contat-id



所以我有一个问题。

我通过以下方式接收联系人列表:

mContentResolver.query(Contacts.CONTENT_URI, CONTACTS_PROJECTION, null, null, null);

对于每个联系人,我通过以下方式提取查找键和联系人ID:

String lookupKey = cursor.getString(ContactsColumns.LOOKUP_KEY);
int contactId = cursor.getInt(ContactsColumns._ID);

鉴于我可以从内容目录中获取实体:

Uri contactUri = Contacts.getLookupUri(contactId, lookupKey);
    contactUri = Uri.withAppendedPath(contactUri, Entity.CONTENT_DIRECTORY);
    Cursor detailCursor = mContentResolver
            .query(contactUri, ENTITY_PROJECTION, SELECTION_ENTITY, SELECTION_ARGS_ENTITY, null);

目前为止,一切都好。当我尝试仅获取仅给定其查找键的单个联系人时,问题就开始了。我通过以下方式获取联系人光标:

Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
Uri res = ContactsContract.Contacts.lookupContact(mContentResolver, lookupUri);
Cursor cursor = mContentResolver.query(res, CONTACTS_PROJECTION, null, null, null);

现在的问题是我得到了一个不同的联系人ID。联系信息属于同一个实际人员,但不同。可能有多个联系人连接到查找键。

因此,当我现在尝试接收实体数据时,由于联系人 ID 不同,因此不会获得相同的结果,这反过来又会生成不同的内容 uri。

例如在第一种情况下,我得到:

content://com.android.contacts/contacts/lookup/<lookupkey>/1008/entities

在第二种情况下,我得到:

content://com.android.contacts/contacts/lookup/<lookupkey>/511/entities

我应该如何使用查找键才能获得与最初获得查找键相同的联系人?

谢谢!


看看这个答案[https://stackoverflow.com/a/4312261][1]。
另外,在同一帖子中阅读此评论

这些 API 并非专门用于同步适配器,查找 URI 在联系人的生存期内有效。(但是,当然,您仍然必须针对以下情况进行编码:在应用程序未运行时可以删除您正在跟踪的联系人)。–鲁本·斯克拉顿十一月 30, 2010 在 12:51

它对我有帮助。

相关内容

  • 没有找到相关文章

最新更新