How to find the max image size supported for conta

2020-06-18 16:59发布

background

starting with jelly bean (4.1), android now supports contact images that are 720x720 .

before, starting with ICS (4.0), android has supported contact images that are 256x256.

and before that, contact photos had just a size of a thumbnail - 96x96

the question

is there any function in the API that returns the max size of the contact image?

i also hope that the manufacturers didn't change the max image sizes, and even if they did and we have such a function, it would return us the correct size.

2条回答
萌系小妹纸
2楼-- · 2020-06-18 17:25

From the announcement:

With Android 4.1, you can store contact photos that are as large as 720 x 720, making contacts even richer and more personal. Apps can store and retrieve contact photos at that size or use any other size needed. The maximum photo size supported on specific devices may vary, so apps should query the built-in contacts provider at run time to obtain the max size for the current device.

I would query for ContactsContract.DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI. It should return what you're looking for.

查看更多
Rolldiameter
3楼-- · 2020-06-18 17:26

according to this link, the correct way to get the max size is:

@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;
}

EDIT: if we use at least API 16 (4.1), it's possible to use something like:

@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
}
查看更多
登录 后发表回答