使用lookupkey获取联系人会产生意外的contat-id

时间:2015-06-17 10:18:39

标签: android contacts android-contacts android-contentresolver contactscontract

所以我有一个问题..

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

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而不会获得相同的结果,而联系人ID又会生成不同的内容uri。

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

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

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

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

我应该如何使用查找键以获得与我首先获得查找键相同的联系人?

谢谢!

0 个答案:

没有答案