Как получить картинку контакта в Android

Рейтинг: 0Ответов: 2Опубликовано: 13.02.2015

Я написал небольшой код, который возвращает URI контакта, выбранного в "Контакты", потом я пытаюсь получить всю инфу по этому контакту, в т.ч. и его картинку, я делаю поиск по Cursor на наличие фото методом cursor.getColumnIndex(ContactsContract.Contacts.Photo.PHOTO), но это не даёт результата, хотя картинка есть в контактах.

Ответы

▲ 1Принят

Нашёл решение проблемы.

Нужно было получить Id контакта, потом по этому ID получить Uri картинки, для этого необходимо выполнить:

Cursor cursor_contact_info = getContentResolver().query(Здесь вписываем URI нужного контакта, new String[]{ ContactsContract.CommonDataKinds.Phone.PHOTO_URI, ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI}, null, null, null);

ContactsContract.CommonDataKinds.Phone.PHOTO_URI Хранит в себе Uri для оригинальной картинки, а ContactsContract.CommonDataKinds.Phone.PHOTO_THUMBNAIL_URI для сжатой, далее необходимо загрузить по этому URI саму картинку, но не методом BitmapFactory.decodeStream(), а методом MediaStore.Images.Media.getBitmap(getContentResolver(), Здесь нужно вставить URI, которое мы получили в CURSOR);

▲ 2

Поле ContactsContract.Contacts.Photo.PHOTO содержит блоб иконки контакта, блоб надо читать потоком InputStream. Чтобы получить из него битмап надо подавать на вход BitmapFactory.decodeStream()

См. документацию примерно так:

public static Bitmap getContactPhoto(Context context, long  contactId) {
   ContentResolver cr=context.getContentResolver();
   Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
   InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
   return BitmapFactory.decodeStream(input);
}