Я тоже споткнулся с этим тоже. Вот способ сделать это. 1-й пользователь может выбрать свой контакт или получить контакт другим способом.
После того, как у вас есть контакт, вы ищите ключ поиска, после чего вы можете получить vcard. Вот код, который я использовал после того, как получил contactUri (вид вставки из разных функций, но должен работать).
Cursor cursor = resolver.query(contactUri, new String[] {
Contacts.LOOKUP_KEY
}, null, null, null);
FileInputStream input = null;
try {
if (cursor.moveToFirst()) {
return cursor.getString(0);
} else return;
AssetFileDescriptor afd = context.getContentResolver().openAssetFileDescriptor(
Uri.withAppendedPath(Contacts.CONTENT_VCARD_URI, lookupKey), "r");
input = afd.createInputStream();
int ch;
StringBuffer strContent = new StringBuffer("");
while ((ch = input.read()) != -1)
strContent.append((char) ch);
Log.d(TAG, strContent.toString());
} finally {
cursor.close();
if (input != null) {
input.close();
}
}