El código que ha proporcionado solo debe acceder a la fotografía predeterminada. Además, debe agregar la ID de contacto a esa URI, no la ID de la foto (suponiendo que esté usando la identificación de la foto de la tabla de datos).
Si hay varias fotos, puede intentar acceder a ellas directamente desde la tabla de datos. Tendrá que analizar un cursor de base de datos y convertir los datos de bytes sin procesar en un mapa de bits de forma manual como se muestra a continuación:
String[] projection = {ContactsContract.CommonDataKinds.Photo.PHOTO};
Uri uri = Uri. ContactsContract.Data.CONTENT_URI;
String where = ContactsContract.Data.MIMETYPE
+ "=" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + " AND "
+ ContactsContract.Data.CONTACT_ID + " = " + mContactId;
Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null);
if(cursor!=null&&cursor.moveToFirst()){
do{
byte[] photoData = photoCursor.getBlob(0);
Bitmap photo = BitmapFactory.decodeByteArray(photoData, 0,
photoData.length, null);
//Do whatever with your photo here...
}while(cursor.moveToNext());
}
le gustaría que mContactId para que se corresponda con el contacto que desea para fotos.
Si desea limitar solo las fotos de Facebook, necesitará usar ContactsContract.Data.RAW_CONTACT_ID en su lugar, que debe obtener de la tabla RawContacts con su ID de contacto y un filtro basado en la cuenta de Facebook (asumiendo que Cuenta sabe lo que está buscando ... que puede variar según la implementación del proveedor de sincronización ...)
Estoy experimentando el mismo problema. Parece que el problema ocurre con los contactos que solo están sincronizados con FB. Para los contactos que se sincronizan desde múltiples fuentes, es decir, Twitter y FB, está bien. –