Загрузить контактный образ в битмап

Функция, которую я использую для получения Uri изображения эхолота контакта с телефона нет. :

public static Uri getPhotoURIFromAddress(Context activity, String address) { String contactId = getContactIdFromAddress(activity, address); ContentResolver contentResolver = activity.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 } cursor.close(); } catch (Exception e) { e.printStackTrace(); return null; } Uri person = ContentUris.withAppendedId( ContactsContract.Contacts.CONTENT_URI, Long.valueOf(contactId)); return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); } 

Который вернет Ури в форме:

 content://com.android.contacts/contacts/799/photo 

Теперь, если я использую этот Uri в ImageView с функцией setImageUri (Uri), он работает.

Но загрузка Bitmap – проблема. Функция, которую я использую:

 public static Bitmap getContactBitmapFromURI(Context context, Uri uri) { InputStream input = ContactsContract.Contacts .openContactPhotoInputStream(context.getContentResolver(), uri); if (input == null) { return null; } return BitmapFactory.decodeStream(input); } 

Который всегда сбой. LogCat:

 12-13 21:40:26.016: E/AndroidRuntime(9076): FATAL EXCEPTION: main 12-13 21:40:26.016: E/AndroidRuntime(9076): java.lang.RuntimeException: Unable to start receiver com.daksh.fss.SMSReceiver: java.lang.IllegalArgumentException: URI: content://com.android.contacts/contacts/799/photo/photo, calling user: com.daksh.fss, calling package:com.daksh.fss 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2362) 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.app.ActivityThread.access$1500(ActivityThread.java:142) 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284) 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.os.Handler.dispatchMessage(Handler.java:99) 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.os.Looper.loop(Looper.java:137) 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.app.ActivityThread.main(ActivityThread.java:4931) 12-13 21:40:26.016: E/AndroidRuntime(9076): at java.lang.reflect.Method.invokeNative(Native Method) 12-13 21:40:26.016: E/AndroidRuntime(9076): at java.lang.reflect.Method.invoke(Method.java:511) 12-13 21:40:26.016: E/AndroidRuntime(9076): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 12-13 21:40:26.016: E/AndroidRuntime(9076): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 12-13 21:40:26.016: E/AndroidRuntime(9076): at dalvik.system.NativeStart.main(Native Method) 12-13 21:40:26.016: E/AndroidRuntime(9076): Caused by: java.lang.IllegalArgumentException: URI: content://com.android.contacts/contacts/799/photo/photo, calling user: com.daksh.fss, calling package:com.daksh.fss 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:170) 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140) 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.content.ContentProviderProxy.query(ContentProviderNative.java:366) 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.content.ContentResolver.query(ContentResolver.java:370) 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.content.ContentResolver.query(ContentResolver.java:313) 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.provider.ContactsContract$Contacts.openContactPhotoInputStream(ContactsContract.java:1973) 12-13 21:40:26.016: E/AndroidRuntime(9076): at android.provider.ContactsContract$Contacts.openContactPhotoInputStream(ContactsContract.java:2004) 

пожалуйста помоги!

Solutions Collecting From Web of "Загрузить контактный образ в битмап"

Я не думаю, что вы должны передать uri фотографии на openContactphotoinputstream. Вам просто нужно передать uri самого контакта, чтобы получить растровое изображение.

  Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id); InputStream stream = ContactsContract.Contacts.openContactPhotoInputStream( mContext.getContentResolver(), uri); 

Или, если вы собираетесь передать контактную фотографию uri, тогда вы можете использовать

 public static Bitmap getContactBitmapFromURI(Context context, Uri uri) { InputStream input = context.getContentResolver().openInputStream(uri) if (input == null) { return null; } return BitmapFactory.decodeStream(input); }