如何加载联系人照片?

我无法在Android中加载联系人的照片。 我已经search了一个答案,但到目前为止已经空了。 有没有人有一个查询联系人的例子,然后加载照片?

所以,给一个contactUri来自一个Activity使用的结果

startActivityForResult(new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI),PICK_CONTACT_REQUEST) 

是:

内容://com.android.contacts/data/1557

loadContact(..)工作正常。 但是,当我调用getPhoto(…)方法时,我得到一个null值的照片InputStream。 这也是令人困惑的,因为URI值是不同的。 contactPhotoUri的计算结果如下:

内容://com.android.contacts/contacts/1557

请参阅以下代码中的内嵌评论。

  class ContactAccessor { /** * Retrieves the contact information. */ public ContactInfo loadContact(ContentResolver contentResolver, Uri contactUri) { //contactUri --> content://com.android.contacts/data/1557 ContactInfo contactInfo = new ContactInfo(); // Load the display name for the specified person Cursor cursor = contentResolver.query(contactUri, new String[]{Contacts._ID, Contacts.DISPLAY_NAME, Phone.NUMBER, Contacts.PHOTO_ID}, null, null, null); try { if (cursor.moveToFirst()) { contactInfo.setId(cursor.getLong(0)); contactInfo.setDisplayName(cursor.getString(1)); contactInfo.setPhoneNumber(cursor.getString(2)); } } finally { cursor.close(); } return contactInfo; // <-- returns info for contact } public Bitmap getPhoto(ContentResolver contentResolver, Long contactId) { Uri contactPhotoUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); // contactPhotoUri --> content://com.android.contacts/contacts/1557 InputStream photoDataStream = Contacts.openContactPhotoInputStream(contentResolver,contactPhotoUri); // <-- always null Bitmap photo = BitmapFactory.decodeStream(photoDataStream); return photo; } public class ContactInfo { private long id; private String displayName; private String phoneNumber; private Uri photoUri; public void setDisplayName(String displayName) { this.displayName = displayName; } public String getDisplayName() { return displayName; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public String getPhoneNumber() { return phoneNumber; } public Uri getPhotoUri() { return this.photoUri; } public void setPhotoUri(Uri photoUri) { this.photoUri = photoUri; } public long getId() { return this.id; } public void setId(long id) { this.id = id; } } } 

显然,我在这里做错了什么,但我似乎无法弄清楚问题所在。 谢谢。

扫描了很多问题并回答了显示缩略图的问题之后,我想我会将解决scheme发布到这个特定的难题上,因为我只能find一对可以工作的夫妇,而没有一个能够为懒惰的开发者提供一个好的解决scheme。

下面的课程需要一个上下文,QuickContactBadge和一个电话号码,并将附加一个本地存储的图像徽章,如果有一个可用于指定的电话号码。

这是这个class级:

 public final class QuickContactHelper { private static final String[] PHOTO_ID_PROJECTION = new String[] { ContactsContract.Contacts.PHOTO_ID }; private static final String[] PHOTO_BITMAP_PROJECTION = new String[] { ContactsContract.CommonDataKinds.Photo.PHOTO }; private final QuickContactBadge badge; private final String phoneNumber; private final ContentResolver contentResolver; public QuickContactHelper(final Context context, final QuickContactBadge badge, final String phoneNumber) { this.badge = badge; this.phoneNumber = phoneNumber; contentResolver = context.getContentResolver(); } public void addThumbnail() { final Integer thumbnailId = fetchThumbnailId(); if (thumbnailId != null) { final Bitmap thumbnail = fetchThumbnail(thumbnailId); if (thumbnail != null) { badge.setImageBitmap(thumbnail); } } } private Integer fetchThumbnailId() { final Uri uri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); final Cursor cursor = contentResolver.query(uri, PHOTO_ID_PROJECTION, null, null, ContactsContract.Contacts.DISPLAY_NAME + " ASC"); try { Integer thumbnailId = null; if (cursor.moveToFirst()) { thumbnailId = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_ID)); } return thumbnailId; } finally { cursor.close(); } } final Bitmap fetchThumbnail(final int thumbnailId) { final Uri uri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, thumbnailId); final Cursor cursor = contentResolver.query(uri, PHOTO_BITMAP_PROJECTION, null, null, null); try { Bitmap thumbnail = null; if (cursor.moveToFirst()) { final byte[] thumbnailBytes = cursor.getBlob(0); if (thumbnailBytes != null) { thumbnail = BitmapFactory.decodeByteArray(thumbnailBytes, 0, thumbnailBytes.length); } } return thumbnail; } finally { cursor.close(); } } } 

以下是一个活动中的典型用例:

 String phoneNumber = "..."; QuickContactBadge badge = (QuickContactBadge) view.findViewById(R.id.friend); new QuickContactHelper(this, badge, phoneNumber).addThumbnail(); 

在一个片段中,它会稍有不同:

 String phoneNumber = "..."; QuickContactBadge badge = (QuickContactBadge) view.findViewById(R.id.friend); new QuickContactHelper(getActivity(), badge, phoneNumber).addThumbnail(); 

现在有办法更有效率 – 例如,如果您正在渲染消息时间线,您希望为给定电话号码的每个徽章实例重新使用相同的位图对象,而不是不断创build新的辅助类实例,检索位图 – 但这里我的目的是发布一个解决scheme,为了清晰起见将其精简到最小,同时提供一个完整的可用解决scheme。 此解决scheme已在Andriod 4.0上构build和testing,并在4.1上进行了testing。

这适用于我:

 public static Bitmap loadContactPhoto(ContentResolver cr, long id) { Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id); InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri); if (input == null) { return null; } return BitmapFactory.decodeStream(input); } 

伙计们,我花了好几个小时试图弄清楚这一点。 这是我创build的一个方法,将通过电话号码(没有破折号)让你的脸书照片。 您当然可以相应地修改它:

  public Bitmap getFacebookPhoto(String phoneNumber) { Uri phoneUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Uri photoUri = null; ContentResolver cr = this.getContentResolver(); Cursor contact = cr.query(phoneUri, new String[] { ContactsContract.Contacts._ID }, null, null, null); if (contact.moveToFirst()) { long userId = contact.getLong(contact.getColumnIndex(ContactsContract.Contacts._ID)); photoUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, userId); } else { Bitmap defaultPhoto = BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_menu_report_image); return defaultPhoto; } if (photoUri != null) { InputStream input = ContactsContract.Contacts.openContactPhotoInputStream( cr, photoUri); if (input != null) { return BitmapFactory.decodeStream(input); } } else { Bitmap defaultPhoto = BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_menu_report_image); return defaultPhoto; } Bitmap defaultPhoto = BitmapFactory.decodeResource(getResources(), android.R.drawable.ic_menu_report_image); return defaultPhoto; } 

经过很多debugging之夜,我发现最好的方法是使用contact id ,如果不能使用photo id

 public static Bitmap loadContactPhoto(ContentResolver cr, long id,long photo_id) { Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id); InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri); if (input != null) { return BitmapFactory.decodeStream(input); } else { Log.d("PHOTO","first try failed to load photo"); } byte[] photoBytes = null; Uri photoUri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, photo_id); Cursor c = cr.query(photoUri, new String[] {ContactsContract.CommonDataKinds.Photo.PHOTO}, null, null, null); try { if (c.moveToFirst()) photoBytes = c.getBlob(0); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } finally { c.close(); } if (photoBytes != null) return BitmapFactory.decodeByteArray(photoBytes,0,photoBytes.length); else Log.d("PHOTO","second try also failed"); return null; } 

在仿真器和Nexus S设备上testing的代码似乎工作。

这些方法都不适合我。 什么工作是:

 String[] projection = new String[] { ContactsContract.Contacts.PHOTO_ID, ///< the correct ID for photo retrieval in loadLocalContactPhotoBytes() // ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, // ContactsContract.CommonDataKinds.Photo.PHOTO }; ContentResolver cr = ctx.getContentResolver(); Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, // Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, // new String[] {RawContacts._ID, RawContacts.ACCOUNT_TYPE, RawContacts.ACCOUNT_NAME}, // new String[] {Contacts._ID}, projection, null, null, ContactsContract.Contacts.DISPLAY_NAME + " ASC"); .... 

//上面的“游标”作为下面的parameter passing

  private byte[] loadLocalContactPhotoBytes(ContentResolver cr, Cursor cursor, byte[] defaultPhotoBytes) { byte[] photoBytes = null;// = cursor.getBlob(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Photo.PHOTO)); // int id = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID)); int id = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_ID)); // Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id); // Uri photoUri = Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); Uri photoUri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, id); Cursor c = cr.query(photoUri, new String[] {ContactsContract.CommonDataKinds.Photo.PHOTO}, null, null, null); try { if (c.moveToFirst()) photoBytes = c.getBlob(0); } catch (Exception e) { // TODO: handle exception Log.w(_TAG, e.toString()); } finally { c.close(); } photoBytes = photoBytes == null ? defaultPhotoBytes : photoBytes; return photoBytes; } 

只是为了踢我把大部分答案复制到一个类,看看他们中的任何一个会成功获得Facebook的缩略图。 他们没有……但是,这是我做的或许也救了你一样。

它显示在一个对话框中的结果,以方便。

请注意 – 它没有优化,你需要捕捉错误和closures游标等

要启动联系人select器,请执行以下操作:

 private static final int SELECT_CONTACT = 1468; Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); contactPickerIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); try { startActivityForResult(contactPickerIntent, SELECT_CONTACT); } catch (ActivityNotFoundException e) { e.printStackTrace(); } 

callback:

 @Override public void onActivityResult(final int requestCode, final int resultCode, final Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null && resultCode == Activity.RESULT_OK) { switch (requestCode) { case SELECT_CONTACT: Uri contactURI = data.getData(); if (contactURI != null) { String contactID = data.getData().getLastPathSegment().trim(); String contactName = ContactThumb.getDisplayName(getActivity(), contactURI); if (contactName != null && !contactName.isEmpty() && contactID != null && !contactID.isEmpty()) { final int THUMBNAIL_SIZE = 100; Bitmap contactThumb = ContactThumb.loadContactPhoto(getActivity(), Long.valueOf(contactID)); if (contactThumb != null) { final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); final int width = contactThumb.getWidth(); final int height = contactThumb.getHeight(); final int ratio = width / height; final Bitmap resized = ThumbnailUtils.extractThumbnail(contactThumb, (THUMBNAIL_SIZE * ratio), THUMBNAIL_SIZE); Drawable icon = new BitmapDrawable(getActivity().getResources(), resized); alert.setIcon(icon); alert.setTitle("Contact details"); final TextView homeTV = new TextView(getActivity()); homeTV.setText(contactName + " : " + contactID); homeTV.setTextSize(12); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { homeTV.setTextColor(Color.WHITE); } homeTV.setPadding(30, 2, 20, 10); homeTV.setMovementMethod(LinkMovementMethod.getInstance()); alert.setView(homeTV); alert.show(); } else { Toast.makeText(getActivity(), "Photo null", Toast.LENGTH_SHORT).show(); } } } break; } } else { // cancelled or error } } 

ContactThumb尝试….

 import java.io.InputStream; import android.content.ContentResolver; import android.content.ContentUris; import android.content.Context; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.provider.ContactsContract; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.PhoneLookup; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.util.Log; public class ContactThumb { private static final String TAG = "THUMB"; public static String getDisplayName(final Context ctx, final Uri contactURI) { String cname = null; try { final String[] projection = new String[] { ContactsContract.Contacts.DISPLAY_NAME }; final Cursor cursor = ctx.getContentResolver().query(contactURI, projection, null, null, null); if (cursor != null) { try { if (cursor.moveToFirst()) { cname = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); } } finally { cursor.close(); } } } catch (final Exception e) { e.printStackTrace(); } return cname; } public static Bitmap loadContactPhoto(final Context ctx, final long contactId) { final Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId); final InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(ctx.getContentResolver(), contactUri); if (input != null) { Log.i(TAG, "loadContactPhoto: input"); return BitmapFactory.decodeStream(input); } else { byte[] photoBytes = null; Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY); final Cursor c = ctx.getContentResolver().query(photoUri, new String[] { ContactsContract.CommonDataKinds.Photo.PHOTO }, null, null, null); try { if (c.moveToFirst()) { photoBytes = c.getBlob(0); } } catch (final Exception e) { e.printStackTrace(); } finally { c.close(); } if (photoBytes != null) { Log.i(TAG, "loadContactPhoto: photoBytes"); return BitmapFactory.decodeByteArray(photoBytes, 0, photoBytes.length); } else { Bitmap another = finalAttempt(ctx, contactId); if (another != null) { Log.i(TAG, "loadContactPhoto: another"); return another; } else { Log.i(TAG, "loadContactPhoto: might be returning default"); return getFacebookPhoto(ctx, getContactNumber(ctx, String.valueOf(contactId))); } } } } public static String getContactNumber(final Context ctx, final String contactID) { Cursor phones = null; try { phones = ctx.getContentResolver().query(Phone.CONTENT_URI, null, Phone.CONTACT_ID + " = " + contactID, null, null); String cnum = null; if (phones != null && phones.getCount() > 0) { while (phones.moveToNext()) { cnum = phones.getString(phones.getColumnIndex(Phone.NUMBER)); if (cnum != null && !cnum.isEmpty() && !cnum.contains("@")) { Log.i(TAG, "getContactNumbers: : cnum: " + cnum); try { phones.close(); } catch (Exception e) { e.printStackTrace(); } return cnum; } } } } catch (Exception e) { e.printStackTrace(); } return null; } public static Bitmap getFacebookPhoto(final Context ctx, String phoneNumber) { Uri phoneUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Uri photoUri = null; ContentResolver cr = ctx.getContentResolver(); Cursor contact = cr.query(phoneUri, new String[] { ContactsContract.Contacts._ID }, null, null, null); if (contact.moveToFirst()) { long userId = contact.getLong(contact.getColumnIndex(ContactsContract.Contacts._ID)); photoUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, userId); } else { Bitmap defaultPhoto = BitmapFactory.decodeResource(ctx.getResources(), android.R.drawable.ic_menu_report_image); return defaultPhoto; } if (photoUri != null) { InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, photoUri); if (input != null) { return BitmapFactory.decodeStream(input); } } else { Bitmap defaultPhoto = BitmapFactory.decodeResource(ctx.getResources(), android.R.drawable.ic_menu_report_image); return defaultPhoto; } Bitmap defaultPhoto = BitmapFactory.decodeResource(ctx.getResources(), android.R.drawable.ic_menu_report_image); return defaultPhoto; } public static Bitmap finalAttempt(final Context ctx, final long contactId) { byte[] photoBytes = null; String[] projection = new String[] { ContactsContract.Contacts.PHOTO_ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, }; ContentResolver cr = ctx.getContentResolver(); final Uri contactUri = ContentUris.withAppendedId(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, contactId); Cursor cursor = cr.query(contactUri, projection, null, null, ContactsContract.Contacts.DISPLAY_NAME + " ASC"); if (cursor != null && cursor.moveToFirst()) { int id = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_ID)); Uri photoUri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, id); Cursor c = cr.query(photoUri, new String[] { ContactsContract.CommonDataKinds.Photo.PHOTO }, null, null, null); try { if (c.moveToFirst()) { photoBytes = c.getBlob(0); } } catch (Exception e) { } finally { cursor.close(); c.close(); } if (photoBytes != null) { return BitmapFactory.decodeByteArray(photoBytes, 0, photoBytes.length); } } return null; } } 

如果有任何方法适用于您,请提出我复制并粘贴代码的答案!

检查这个链接为Android开发者build议的方式

祝你好运

看来我的问题是因为我的设备中的联系人是从Facebook同步,因此照片不可用。

http://groups.google.com/group/android-developers/msg/be8d0cf3928e4b7f

Android文档说,我们应该这样做。

 public Bitmap openPhoto(long contactId) { Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId); Uri photoUri = Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); Cursor cursor = getContentResolver().query(photoUri, new String[] {ContactsContract.Contacts.Photo.PHOTO}, null, null, null); if (cursor == null) { return null; } try { if (cursor.moveToFirst()) { byte[] data = cursor.getBlob(0); if (data != null) { return BitmapFactory.decodeStream(new ByteArrayInputStream(data)); } } } finally { cursor.close(); } return null; } 

contactId代表:

 getString(c.getColumnIndex(ContactsContract.Contacts._ID)) 

来源: https : //developer.android.com/reference/android/provider/ContactsContract.Contacts.Photo.html

代码采取: developer.android.com

 public InputStream openPhoto(long contactId) { Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY); Cursor cursor = getContentResolver().query(photoUri, new String[] {Contacts.Photo.PHOTO}, null, null, null); if (cursor == null) { return null; } try { if (cursor.moveToFirst()) { byte[] data = cursor.getBlob(0); if (data != null) { return new ByteArrayInputStream(data); } } } finally { cursor.close(); } return null; } 

经过一番研究,我find了解决scheme: 显示快速联系徽章

我的代码稍作修改,对我来说工作正常

  public Bitmap loadContactPhoto(String name) { String photoUri = null; int thumbnailColumn; ContentResolver cr = GlobalData.instance().getContext().getContentResolver(); String[] projection = new String[] { ContactsContract.Contacts._ID ,ContactsContract.Contacts.PHOTO_ID, ContactsContract.Contacts.PHOTO_URI, ContactsContract.Contacts.PHOTO_THUMBNAIL_URI}; Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, projection, ContactsContract.Contacts.DISPLAY_NAME + "='" + name + "'", null, null); if (cursor.moveToFirst()) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) thumbnailColumn = cursor.getColumnIndex(Contacts.PHOTO_THUMBNAIL_URI); else thumbnailColumn = cursor.getColumnIndex(PhoneLookup._ID); photoUri = cursor.getString(thumbnailColumn); if(photoUri != null) return loadContactPhotoThumbnail(photoUri); else return null; } return null; } private Bitmap loadContactPhotoThumbnail(String photoData) { AssetFileDescriptor afd = null; try { Uri thumbUri; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { thumbUri = Uri.parse(photoData); } else { final Uri contactUri = Uri.withAppendedPath(Contacts.CONTENT_URI, photoData); thumbUri = Uri.withAppendedPath(contactUri, Photo.CONTENT_DIRECTORY); } afd = GlobalData.instance().getContext().getContentResolver().openAssetFileDescriptor(thumbUri, "r"); FileDescriptor fileDescriptor = afd.getFileDescriptor(); if (fileDescriptor != null) return BitmapFactory.decodeFileDescriptor(fileDescriptor, null, null); } catch (FileNotFoundException e) { } finally { if (afd != null) { try { afd.close(); } catch (IOException e) { } } } return null; } 

检查我的post:

https://stackoverflow.com/a/41445851/1733810

 public Bitmap retrieveContactPhoto(Context context, String number) { ContentResolver contentResolver = context.getContentResolver(); String contactId = null; Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); String[] projection = new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}; Cursor cursor = contentResolver.query( uri, projection, null, null, null); if (cursor != null) { while (cursor.moveToNext()) { contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID)); } cursor.close(); } Bitmap photo = BitmapFactory.decodeResource(context.getResources(), R.mipmap.popup); try { Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.valueOf(contactId)); Uri displayPhotoUri = Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.DISPLAY_PHOTO); AssetFileDescriptor fd = getContentResolver().openAssetFileDescriptor(displayPhotoUri, "r"); InputStream inputStream=fd.createInputStream(); if (inputStream != null) { photo = BitmapFactory.decodeStream(inputStream); } assert inputStream != null; inputStream.close(); } catch (IOException e) { e.printStackTrace(); } return photo; } 
 public static Bitmap getContactBitmapFromURI(Context context, Uri uri) { AssetFileDescriptor fd = null; try { Uri displayPhotoUri = Uri.withAppendedPath(uri, ContactsContract.Contacts.Photo.DISPLAY_PHOTO); fd = context.getContentResolver().openAssetFileDescriptor(displayPhotoUri, "r"); return BitmapFactory.decodeStream(fd.createInputStream()); } catch (IOException e) { e.printStackTrace(); } return BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_contact); }