Гах, другой сценарий здесь, который должен быть простым, оказывается очень трудоемким и болезненным.
Я использую это для запроса поставщика контактов:
private Cursor getContacts(){
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.PHOTO_ID
};
......
return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}
Это работает нормально и извлекает имена контактов, а на нескольких контактах показывает числовой идентификатор поля PHOTO_ID, которое, как я полагаю, является запрашиваемым PHOTO_ID. Но затем я вставляю этот идентификатор в этот метод для извлечения растрового изображения, оно терпит неудачу при каждом контакте, и поток каждый раз равен нулю. Я проверяю набор контактов, в который входят некоторые с фотографиями контактов Android (я знаю, что есть некоторые проблемы при извлечении фотографий из контактов Facebook).
private Bitmap loadContactPhoto(long id) {
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id);
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, uri);
if (input == null) return null;
Bitmap bitmap = BitmapFactory.decodeStream(input);
return bitmap;
}
Что я пропустил?