Acabo de tropezar con este también. Aquí hay una manera de hacerlo. Primero deje que el usuario elija su contacto u obtenga el contacto de otra manera.
Después de tener el contactoUri, busca el lookup_key y luego puede recuperar la vcard. Aquí está el código que utilicé después de obtener el contactUri (tipo de copia pegar desde diferentes funciones, pero debería funcionar).
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();
}
}
Espero que esta respuesta le ayudará a: "[Obtener datos vCard Android de Intención] [1]" [1]: http://stackoverflow.com/questions/12659323/android -get-vcard-data-from-intent/12771561 # 12771561 –