从联系人android中检索照片

时间:2014-03-11 14:36:25

标签: java android photo contact

我使用此代码从一位联系人处检索照片:

private Uri getPhotoUri(String idContact) {
        try {
            Cursor cur = getApplicationContext().getContentResolver().query(
                    ContactsContract.Data.CONTENT_URI,
                    null,
                    ContactsContract.Data.CONTACT_ID + "=" + idContact + " AND "
                            + ContactsContract.Data.MIMETYPE + "='"
                            + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null,
                    null);
            if (cur != null) {
                if (!cur.moveToFirst()) {
                    return null; // no photo
                }
            } else {
                return null; // error in cursor process
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long
                .parseLong(idContact));
        return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
    }

所以,问题在于使用此代码我可以检索低分辨率的照片。 我怎样才能拍出更好的照片?

也许我不应该使用CONTENT_DIRECTORY。

谢谢。

1 个答案:

答案 0 :(得分:0)

此代码非常适合获得高分辨率照片:

 Uri my_contact_Uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(id));
 InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream(cr, my_contact_Uri, true);
 BufferedInputStream buf = new BufferedInputStream(photo_stream);
 Bitmap my_btmp = BitmapFactory.decodeStream(buf);
 buf.close();
 return my_btmp;

此外,只有fyi,高分辨率的联系人照片在API 14之前并不存在,所以如果您在API为13或更低的AVD /设备上运行它,您将无法获得高分辨率的照片。

请查看此问题:Get high-res contact photo as bitmap below API level 14 Android了解详情。