【问题标题】:How to find the max image size supported for contacts images?如何找到联系人图像支持的最大图像大小?
【发布时间】:2013-07-23 23:26:04
【问题描述】:

背景

从 jelly bean (4.1) 开始,android 现在支持720x720 的联系人图片。

之前,从 ICS (4.0) 开始,android 已经支持256x256 的联系人图片。

在此之前,联系人照片只有缩略图大小 - 96x96

问题

API 中是否有任何函数可以返回联系人图像的最大尺寸?

我也希望制造商不要更改最大图像尺寸,即使他们这样做并且我们有这样的功能,它也会返回正确的尺寸。

【问题讨论】:

    标签: android image photo resolution android-contacts


    【解决方案1】:

    根据this link,获取最大尺寸的正确方法是:

    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    public static int getMaxContactPhotoSize(final Context context) {
        if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH) {
            // Note that this URI is safe to call on the UI thread.
            final Uri uri = ContactsContract.DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI;
            final String[] projection = new String[] { ContactsContract.DisplayPhoto.DISPLAY_MAX_DIM };
            final Cursor c = context.getContentResolver().query(uri, projection, null, null, null);
            try {
                c.moveToFirst();
                return c.getInt(0);
            } finally {
                c.close();
            }
        }
        // fallback: 96x96 is the max contact photo size for pre-ICS versions
        return 96;
    }
    

    编辑:如果我们至少使用 API 16 (4.1),则可以使用类似的东西:

    @AnyThread
    @RequiresPermission(anyOf = [Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS])
    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    fun getMaxContactPhotoSize(context: Context): Int {
        // Note that this URI is safe to call on the UI thread.
        if (contactMaxPhotoSize > 0)
            return contactMaxPhotoSize
        val uri = ContactsContract.DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI
        val projection = arrayOf(ContactsContract.DisplayPhoto.DISPLAY_MAX_DIM)
        context.contentResolver.query(uri, projection, null, null, null)?.use { cursor ->
            cursor.moveToFirst()
            contactMaxPhotoSize = cursor.getInt(0)
        }
        if (contactMaxPhotoSize > 0)
            return contactMaxPhotoSize
        // fallback: 720x720 is the max contact photo size for 4.1 version
        contactMaxPhotoSize = 720
        return contactMaxPhotoSize
    }
    

    【讨论】:

    • 那么...我说了什么,然后呢?酷。
    • 是的,如果您希望我勾选您的答案,请复制此代码并链接到您的答案。
    • 这很奇怪,因为如果您为同一个联系人调用 openContactPhotoInputStream 的最后一个参数布尔版本,它应该总是返回高分辨率图片。我建议尝试获取 PHOTO_ID 和/或 PHOTO_FILE_ID 来手动查询 Uri,因为 open... 方法可能会在 SDK 中被破坏。以下链接developer.android.com/reference/android/provider/…
    • 我从来没有做过,但我用谷歌搜索了它(最终在 SF 上,其他地方:D)。 This guy 似乎正在这样做。请参阅他的 queryContactImage 方法,该方法从 queryContactInfo 查询中的 PHOTO_ID 提供。然后他只是从查询中创建一个位图。请注意,您可以为 PHOTO_THUMBNAIL_URI 做类似的事情
    • 哦,他还提到了一些我曾经看过但直到现在才记得的 API 便利类。它提供了有关如何将联系人照片存储在每个联系人的只读目录中的示例以及如何获取系统存储的两张图片(拇指和完整分辨率)的示例:developer.android.com/reference/android/provider/…
    【解决方案2】:

    来自the announcement

    使用 Android 4.1,您可以存储最大 720 x 720 的联系人照片,使联系人更加丰富和个性化。应用程序可以存储和检索该尺寸的联系人照片或使用所需的任何其他尺寸。 特定设备支持的最大照片尺寸可能会有所不同,因此应用应在运行时查询内置联系人提供程序以获取当前设备的最大尺寸。

    我会查询ContactsContract.DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI。它应该返回您要查找的内容。

    【讨论】:

    • 如果我错了,请纠正我,但如果你在 API 14 下,它将是 96x96,你不需要查询,对吧?
    • 我听说一些制造商甚至在姜饼上使用更高分辨率的联系人。我不确定我是从哪里得到这些信息的。可能是错的。
    • 即使是这样,您也必须知道每个制造商的自定义查询,因为在此之前没有标准查询。这最终可能会成为我可能会避免的混乱混乱,并且只需使用用户的默认值
    猜你喜欢
    • 1970-01-01
    • 2018-09-30
    • 2014-03-22
    • 2021-01-17
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    相关资源
    最近更新 更多