简体   繁体   English

获取高分辨率联系人照片

[英]Get high resolution contact photo

Does anyone know how to retrieve the high quality photo of a telephonebook contact (user)? 有谁知道如何检索电话簿联系人(用户)的高质量照片? All of my tries resulted in low quality images... 我所有的尝试都导致图像质量低下...

It doesn't matter If I retrieve it via "openContactPhotoInputStream" or via an "Uri", both are in low quality. 没关系,如果我是通过“ openContactPhotoInputStream”或“ Uri”检索到的,则两者的质量都不高。 It looks like Thumbnails. 它看起来像缩略图。

My approaches: 我的方法:

1 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 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 is set to android version 4.3. Min SDK设置为android 4.3版。 Thank you. 谢谢。

Use the other overloaded method of openContactPhotoInputStream (added in API level 14), the one with the boolean parameter indicating that you prefer high res photos. 使用openContactPhotoInputStream的另一种重载方法(在API级别14中添加),该方法的布尔值指示您更喜欢高分辨率照片。

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM