Извлечь фотографию контакта - PullRequest
3 голосов
/ 27 июня 2011

Гах, другой сценарий здесь, который должен быть простым, оказывается очень трудоемким и болезненным.

Я использую это для запроса поставщика контактов:

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;
}

Что я пропустил?

1 Ответ

2 голосов
/ 28 июня 2011

openContactPhotoInputStream () берет uri контакта, попробуйте вызвать его с помощью столбца ContactsContract.Contacts._ID вместо столбца PHOTO_ID, и вы должны увидеть лучшие результаты.

Здесь есть куча соответствующих обсуждений скод для проверки:

Как загрузить фотографию контакта?

Обратите внимание, что в некоторых случаях вы увидите фотографию в приложении родных контактов, которое получилоне загружать через распознаватель контента.Некоторая информация о синхронизации, такая как, например, Facebook, помечена для использования только самим приложением контактов и не экспортируется в другие приложения: - (

Однако при использовании contactUri следует по крайней мере позаботиться о некоторыхиз ваших вопросов.

...