I've managed to display photos with the above changes:
Uri queryUri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.LOOKUP_KEY,
ContactsContract.Contacts.PHOTO_THUMBNAIL_URI,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.STARRED};
String selection =ContactsContract.Contacts.STARRED + "='1'";
Cursor cursor = managedQuery(queryUri, projection, selection,null,null);
long id= cursor.getColumnIndex(ContactsContract.Contacts._ID);
Bitmap bitmap = loadContactPhoto(getContentResolver(), id);
if(bitmap!=null){
favIcon.setImageBitmap(bitmap);
}
else{
}
String[] from = {ContactsContract.Contacts.PHOTO_THUMBNAIL_URI, ContactsContract.Contacts.DISPLAY_NAME};
int to[] = new int[]{
R.id.ivDefContact,
R.id.tvContactName
};
ListAdapter adapter = new SimpleCursorAdapter(
this,
R.layout.favs_list_item,
cursor,
from,
to,
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
final ListView listStarred = (ListView) findViewById(R.id.lvFavs);
listStarred.setAdapter(adapter);
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);
}
Now photos displayed correct for the contacts which has a photo.