所以我有一个问题。
我通过以下方式接收联系人列表:
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
它对我有帮助。