获取高分辨率的联系人照片

时间:2014-04-29 18:32:58

标签: java android

有谁知道如何检索电话簿联系人(用户)的高质量照片? 我所有的尝试都导致了低质量的图像...

无关紧要如果我通过“openContactPhotoInputStream”或“Uri”检索它,两者都是低质量的。它看起来像缩略图。

我的方法:

1

private void retrieveContactPhoto(ImageView imgView, Long contactId) {

    Bitmap photo = null;

    try {
        InputStream inputStream = ContactsContract.Contacts
                .openContactPhotoInputStream(getContentResolver(),
                        ContentUris.withAppendedId(
                                ContactsContract.Contacts.CONTENT_URI,
                                contactId));

        if (inputStream != null) {
            photo = BitmapFactory.decodeStream(inputStream);
            imgView.setImageBitmap(photo);
        }

        assert inputStream != null;
        inputStream.close();

    } catch (IOException e) {
        e.printStackTrace();
    }

}

2

public static Uri getPhotoUri(long contactId) {
    ContentResolver contentResolver = MainActivity.instance
            .getContentResolver();

    try {
        Cursor cursor = contentResolver
                .query(ContactsContract.Data.CONTENT_URI,
                        null,
                        ContactsContract.Data.CONTACT_ID
                                + "="
                                + contactId
                                + " AND "

                                + ContactsContract.Data.MIMETYPE
                                + "='"
                                + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE
                                + "'", null, null);

        if (cursor != null) {
            if (!cursor.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, contactId);
    return Uri.withAppendedPath(person,
            ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
}

Min SDK设置为android 4.3版。 谢谢。

1 个答案:

答案 0 :(得分:2)

使用openContactPhotoInputStream的另一个重载方法(在API级别14中添加),其中一个布尔参数表示您更喜欢高分辨率照片。

http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html#openContactPhotoInputStream(android.content.ContentResolver,android.net.Uri,boolean)

public static InputStream openContactPhotoInputStream
        (ContentResolver cr, Uri contactUri, boolean preferHighres)