How to get Android Contact thumbnail

Viewed 8567

I have a listview adapter and I'm trying the following in the newView method:

@Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {

        final LayoutInflater inflater = LayoutInflater.from(context);
        View v = inflater.inflate(layout, parent, false);

        long contactId = Long.valueOf(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))); 
        String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
        boolean hasPhone = Boolean.parseBoolean(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))); 
        String thumbnailUri = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI)); 

        TextView name_text = (TextView) v.findViewById(R.id.name_entry);
        if (name_text != null) {
            name_text.setText(contactName);
        }

        name_text.setTag(new Contact(contactId, hasPhone));

        ImageView thumbnail = (ImageView) v.findViewById(R.id.thumbnail);
        if (thumbnailUri != null) {
            thumbnail.setImageURI(Uri.parse(thumbnailUri));
        } else {
            thumbnail.setImageResource(R.drawable.ic_launcher);
        }

        return v;
    }

But when I try to parse the Uri that is stored in thumbnailUri, I receive the following error:

   08-09 01:58:38.619: I/System.out(1471): resolveUri failed on bad bitmap uri: content://com.android.contacts/contacts/1/photo

Am I going about this the wrong way? Any help would be greatly appreciated!

2 Answers

Probably will help someone. Just leave it here.
This way you can get thumbnail uri by contact id.
Tested on Android API 28.

    ContentResolver cr = getContentResolver();
    String[] projection = new String[] {ContactsContract.Contacts.PHOTO_THUMBNAIL_URI};
    String where = ContactsContract.Contacts.NAME_RAW_CONTACT_ID = "?";
    String[] selectionArgs = {your_contact_id}
    Cursor cur = cr.query(ContactsContract.Data.CONTENT_URI, projection, where, selectionArgs, null);

    String thumbnailUri;
    if ((cur != null ? cur.getCount() : 0) > 0) {
        if (cur.moveToNext()) {
            thumbnailUri = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI));
        }
    }
    if(cur!=null){
        cur.close();
    }
    return thumbnailUri;
Related