В зависимости от вашего варианта использования, может быть другой (лучше?) Вариант. Если у вас есть курсор всех контактов, и вы говорите, связывая их с представлением списка, вы можете просто попытаться получить фотографию, используя openContactPhotoInputStream, и проверить на нулевое значение.
InputStream stream = Contacts.openContactPhotoInputStream(context.getContentResolver(), lookupUri);
if (stream == null) {
//your logic here when no photo found
}
Вот краткий пример для любого, кто может наткнуться на это:
import android.provider.ContactsContract.Contacts;
//Define someDefaultPhoto somewhere accessible
protected Bitmap getContactPhoto(Context context, Uri lookupUri) {
Bitmap resultPhoto;
InputStream stream;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
//For some reason this seems to be necessary pre-ICS. If anyone knows why, I'd love to hear
lookupUri = Contacts.lookupContact(context.getContentResolver(), lookupUri);
}
stream = Contacts.openContactPhotoInputStream(context.getContentResolver(), lookupUri);
if (stream == null) {
resultPhoto = someDefaultPhoto;
}
else {
resultPhoto = BitmapFactory.decodeStream(stream);
}
return resultPhoto;
}
Тогда вы можете назвать это примерно так:
int columnLookupKey = cursor.getColumnIndex(Contacts.LOOKUP_KEY);
String lookupKey = cursor.getString(columnLookupKey);
Uri lookupUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey);
Bitmap contactPhoto = getContactPhoto(context, lookupUri);