当用户需要选择联系人时,我称之为:
Intent pickContactIntent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI );
pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
onActivityResult中的我有以下内容:
Uri pickedContact = intent.getData();
Cursor cursor = getContentResolver().query(pickedContact, null, null, null, null);
if (cursor.moveToFirst()) {
contactInfo.name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contactInfo.photo = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI));
Cursor pCur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))}, null);
}
当DISPLAY_NAME和PHOTO_THUMBNAIL_URI按预期工作时,_ID似乎是一个不同的联系人,因此电话号码光标会检索不相关的电话号码(不同的联系人)。我错过了什么?
答案 0 :(得分:1)
您指定为Uri
的数据的Intent
与您设置的mimetype不匹配。
对于您使用的数据Contacts.CONTENT_URI
,其中包含mimetype Contacts.CONTENT_TYPE
(其值为" vnd.android.cursor.dir / contact")。对于mimetype,您将其设置为CommonDataKinds.Phone.CONTENT_TYPE
(其值为" vnd.android.cursor.dir / phone_v2"),它通常与Uri CommonDataKinds.Phone.CONTENT_URI
相关联。
发生的事情是你实际上正在选择一部手机,所以你要取回手机的内容Uri而不是联系人。当您提取显示名称和缩略图照片Uri时,这一点并不明显,因为当您查询电话时,这些列无论如何都来自联系人。但是,_ID是针对电话的,而不是联系人。
将您的代码更改为
pickContactIntent.setType(Contacts.CONTENT_TYPE)
...或者只是完全删除对setType()
的调用,因为无论如何系统都会解析它。