Приложение, над которым я работаю, прошло тестирование на физических устройствах. Команда тестирования сообщила, что
Huawei P8 Lite Android 5.1: если загружено изображение размером более 4 МБ, приложение неожиданно закрывается
Я попытался повторить проблема с эмулятором "Google Pixel 3a с Android 5.1", но процесс прошел нормально. Код для этого процесса загрузки включает метод изменения размера, так что независимо от того, какое изображение вы выберете, оно не будет> 4 МБ, когда оно достигнет сервера. Мне нужно либо воспроизвести ошибку и найти способ исправить проблему, либо сделать что-то с кодом, который предотвращает такой взлом sh (мы считаем, что это из-за нехватки памяти sh) независимо от того, сколько лет устройству. Мы поддерживаем Android 21 +
private fun resize(image: Bitmap, maxWidth: Int, maxHeight: Int): Bitmap {
var imageResized = image
if (maxHeight > 0 && maxWidth > 0) {
val width = imageResized.width
val height = imageResized.height
val ratioBitmap = width.toFloat() / height.toFloat()
val ratioMax = maxWidth.toFloat() / maxHeight.toFloat()
var finalWidth = maxWidth
var finalHeight = maxHeight
if (ratioMax > ratioBitmap) {
finalWidth = (maxHeight.toFloat() * ratioBitmap).toInt()
} else {
finalHeight = (maxWidth.toFloat() / ratioBitmap).toInt()
}
imageResized = Bitmap.createScaledBitmap(imageResized, finalWidth, finalHeight, true)
return imageResized
} else {
return imageResized
}
}
fun captureImageResult(requestCode: Int, data: Intent?) {
if (requestCode == SELECT_PICTURE) {
data?.data?.let {
mCapturedImageURI = data.data
}
}
mCapturedImageURI.let {
val msm = MediaStorageManager((view as NewBaseFragment).activity!!)
val bmp = msm.getBitmapFromUri(mCapturedImageURI!!)
//save image bytes
imageBytes = msm.getBytesFromBitmap(bmp!!)
val bitmapScaled = resize(bmp, 1024, 1024)
imageBytes = msm.getBytesFromBitmap(bitmapScaled)
//image too big
if (imageBytes?.size ?: IMAGE_MAX_SIZE < IMAGE_MAX_SIZE) {
//show image selected
view.renderImage(bitmapScaled)
} else {
view.showErrorDialog()
imageBytes = null
}
}
}