Поскольку я обновил Android Studio до 3.6.3 , я не могу получить сделанное изображение в функции onActivityResult()
. Я использую телефон Samsung с Android 8 , и разрешения Storage и Camera установлены как разрешенные.
Вот мой код:
int CAMERA = 0;
int GALLERY = 1;
Uri imageURI;
File file;
public void openCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
file = new File(Environment.getExternalStorageDirectory(), "image.jpg");
imageURI = FileProvider.getUriForFile(getApplicationContext(), getPackageName() + ".provider", file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageURI);
startActivityForResult(intent, CAMERA);
}
// onActivityResult
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
Bitmap bmp;
// • IMAGE FROM CAMERA
if (requestCode == CAMERA) {
try {
File f = file;
ExifInterface exif = new ExifInterface(f.getPath());
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
int angle = 0;
if (orientation == ExifInterface.ORIENTATION_ROTATE_90) { angle = 90;
} else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) { angle = 180;
} else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) { angle = 270; }
Matrix mat = new Matrix();
mat.postRotate(angle);
bmp = BitmapFactory.decodeStream(new FileInputStream(f), null, null);
assert bmp != null;
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), mat, true);
bmp = scaleBitmapToMaxSize(800, bmp);
myImgView.setImageBitmap(bmp);
// error
} catch (IOException | OutOfMemoryError e) { Log.i("log-", "ERROR: " + e.getMessage()); }
}
}// ./ If RESULT_OK
}
// Scale image
public static Bitmap scaleBitmapToMaxSize(int maxSize, Bitmap bm) {
int outWidth;
int outHeight;
int inWidth = bm.getWidth();
int inHeight = bm.getHeight();
if (inWidth > inHeight) {
outWidth = maxSize;
outHeight = (inHeight * maxSize) / inWidth;
} else {
outHeight = maxSize;
outWidth = (inWidth * maxSize) / inHeight;
}
return Bitmap.createScaledBitmap(bm, outWidth, outHeight, false);
}
Манифест:
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.CAMERA"/>
После того, как я сделал снимок, я получаю эту ошибку в Logcat, и, конечно же, изображение не отображается в myImgView :
ERROR: /storage/emulated/0/image.jpg: open failed: ENOENT (No such file or directory)
Как это исправить?