How do you get a contact photo through the contact provider in android 2.3.6?

android, android-contacts, java

Solution

You can get the contact photo uri without using `ContactsContract.CommonDataKinds.Email.PHOTO_URI` this way:

private Uri getPhotoUriFromEmail(String email) {
    Uri u = null;
    String[] projection = { ContactsContract.CommonDataKinds.Photo.CONTACT_ID };
    String photoUri;
    ContentResolver cr = getContentResolver();
    Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
            projection,
            ContactsContract.CommonDataKinds.Email.ADDRESS + " = ?",
            new String[]{email}, null);
    if (emailCur.moveToNext()) {
        int columnIndex = emailCur.getColumnIndex(
                              ContactsContract.CommonDataKinds.Photo.CONTACT_ID);
        long contactId = emailCur.getLong(columnIndex);

        u = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, 
                                       contactId);
        u = Uri.withAppendedPath(u, 
                                ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
    }
    return u;
}

Alternatively, you can get the photo stream utilizing method `ContactsContract.Contacts .openContactPhotoInputStream(ContentResolver, Uri)` this way:

private InputStream getPhotoInputStreamFromEmail(String email) {
    Uri u = null;
    String[] projection = { ContactsContract.CommonDataKinds.Photo.CONTACT_ID };
    String photoUri;
    ContentResolver cr = getContentResolver();
    Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            projection,
            ContactsContract.CommonDataKinds.Email.ADDRESS + " = ?",
            new String[]{email}, null);
    if (emailCur.moveToNext()) {
        int columnIndex = emailCur.getColumnIndex(
                ContactsContract.CommonDataKinds.Photo.CONTACT_ID);
        long contactId = emailCur.getLong(columnIndex);

        u = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,
                contactId);
        return ContactsContract.Contacts.openContactPhotoInputStream(cr, u);
    }
    return null;
}

Problem

I have this version that works for android 4 (`String email` is a gmail address): ``` private Uri getPhotoUriFromEmail(String email) { Uri u = null; String[] projection = { ContactsContract.CommonDataKinds.Email.PHOTO_URI }; String photoUri; ContentResolver cr = context.getContentResolver(); Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, projection, ContactsContract.CommonDataKinds.Email.ADDRESS + " = ?", new String[]{email}, null); if (emailCur.moveToNext()) { photoUri = emailCur.getString( emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.PHOTO_URI)); u = Uri.parse(photoUri); } return u; } ``` What is its 2.3.6 version? (Also shouldn't the android SDK warn me about using API 11 when I set API 8 as my minimal API support? Because it didn't...)

Original source