the function i use to get the Uri of the contact image thumbnail from the phone no. :
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);
}
Which will return a Uri in the form of :
content://com.android.contacts/contacts/799/photo
now, if i use this Uri in an ImageView with the setImageUri(Uri) function, it works.
But loading a Bitmap is a problem. the function I'm using is :
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);
}
which always crashes. LogCat is :
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)
please help!
I dont think you should pass the uri of the photo to openContactphotoinputstream. You just need to pass the uri of the contact itself to get the bitmap.
Or if you are going to pass the contact photo uri then you could use