Cómo obtener foto de contacto URI

Estoy trabajando con Android Contact ContentProvider. Tengo un número de teléfono y necesito obtener el URI de la foto del contacto asociado con este número de teléfono. ¿¿¿Cómo puedo hacerlo???

Sé que puedo obtener los datos sin procesar de la foto y construir un InputStream , pero no quiero el flujo de entrada, necesito el URI .

EDIT: Originalmente estoy usando código siguiente para buscar información de contacto

Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNo)); Cursor cursor = context.getContentResolver().query(uri, details, null, null, null); 

Para obtener el id conatct usando el número de teléfono utilice el código siguiente:

 import android.provider.ContactsContract.PhoneLookup; public String fetchContactIdFromPhoneNumber(String phoneNumber) { Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Cursor cursor = this.getContentResolver().query(uri, new String[] { PhoneLookup.DISPLAY_NAME, PhoneLookup._ID }, null, null, null); String contactId = ""; if (cursor.moveToFirst()) { do { contactId = cursor.getString(cursor .getColumnIndex(PhoneLookup._ID)); } while (cursor.moveToNext()); } return contactId; } 

Y utilizar el identificador de contacto obtenido para obtener la contatc foto URI. Utilice el siguiente código para obtener URI de foto:

 import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Phone; public Uri getPhotoUri(long contactId) { ContentResolver contentResolver = getContentResolver(); try { Cursor cursor = contentResolver .query(ContactsContract.Data.CONTENT_URI, null, ContactsContract.Data.CONTACT_ID + "=" + contactId + " AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null, null); if (cursor != null) { if (!cursor.moveToFirst()) { return null; // no photo } } else { return null; // error in cursor process } } catch (Exception e) { e.printStackTrace(); return null; } Uri person = ContentUris.withAppendedId( ContactsContract.Contacts.CONTENT_URI, contactId); return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); } 

Espero que esto ayude.

Esta solución demuestra cómo obtener una imagen de un contacto de usuario y luego mostrarla en un ImageView .

 ImageView profile = (ImageView)findViewById(R.id.imageView1); Uri my_contact_Uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(Contact_Id)); InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(),my_contact_Uri); BufferedInputStream buf =new BufferedInputStream(photo_stream); Bitmap my_btmp = BitmapFactory.decodeStream(buf); profile.setImageBitmap(my_btmp); 

Aquí está el código de la documentación de Android .

 Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId); return Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 
  final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; String phoneNumber = "+1 416 385 7805"; ContentResolver contentResolver = context.getContentResolver(); Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY, IS_HONEYCOMB ? ContactsContract.Contacts.PHOTO_THUMBNAIL_URI : ContactsContract.Contacts._ID, }; Cursor cursor = contentResolver.query( uri, projection, null, null, null); if (cursor != null && cursor.moveToNext()) { long contactId = cursor.getLong(0); String lookupKey = cursor.getString(1); String thumbnailUri = cursor.getString(2); cursor.close(); } 

Así que ahora si sdk es nido de abeja u superior u tiene thumbnail uri del contacto. O usted puede construir un lookup uri como este:

 Uri uri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey); 

PS Si ya conoce el ID de contacto y / o la clave de búsqueda , puede construir un Uri de cadena:

content://com.android.contacts/contacts/lookup/{lookup key}/{contact id} : content://com.android.contacts/contacts/lookup/{lookup key}/{contact id} thumbnail: content://com.android.contacts/contacts/{contact id}/photo

Por lo tanto, es mejor almacenar en caché estos valores.

  • Compartir y persistir datos entre varias aplicaciones de Android
  • Inserción de elementos de calendario en Android ICS
  • El proveedor de contenido no está trabajando en dispositivos de la familia Nexus
  • Threading de ContentProvider
  • ¿Qué puede causar StaleDataException distinto de llamar prematuramente cursor.close ()?
  • IllegalStateException "intenta volver a abrir un objeto ya cerrado" en SimpleCursorAdapter de ContentProvider
  • Android, proveedor de contenido en el proyecto de biblioteca
  • Content Observer onChange método llamado dos veces después de 1 cambio en el cursor
  • ¿Por qué el proveedor de contenido sin permisos y exportado = true es accesible para cualquier aplicación?
  • Compartir una imagen con un proveedor de contenido en la aplicación de Android
  • UnsupportedOperationException al llamar a getSharedPreferences () de la prueba de unidad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.