java - 获取高分辨率联系人照片

标签 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。 谢谢。

最佳答案

使用 openContactPhotoInputStream 的另一种重载方法(在 API 级别 14 中添加),带有 boolean 参数的方法表明您更喜欢高分辨率照片。

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)

关于java - 获取高分辨率联系人照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23372581/

相关文章:

java - 监听器垃圾收集说明(Java/Android)

java - 实现 JsonObjectRequest 时遇到问题

java - 由于文件路径中的附加斜杠,找不到 Spring 占位符 (.properties)

android - 将联系人的图片加载到 ListView 而不是默认图片?

android - 如何使用选择器为 ImageView 着色?

java - 如何使用ArrayList在Java Jtable中显示mysql表中的所有数据?

java - xslt 转换不关闭标签

java - canvas 不在 java android 中绘制

java - 从 Android 应用程序向本地服务器多播消息

安卓单元测试 : Cucumber-jvm + Android Instrumentation