このリンクによると、最大サイズを取得する正しい方法は次のとおりです。
@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
}