According to this link , the correct way to get the maximum size:
@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; }
UPDATE: if we use at least API 16 (4.1), you can 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 }
source share