Как сделать фото и сохранить результат в картинках на Andrdoid 10?
Google представила Scoped Storage на Android 10, согласно документу, мы можем писать в общедоступные каталоги без запроса разрешения с помощью MediaStore API.
До Android 10, когда нам нужно сделать снимок и сохранить его в изображениях, код выглядит следующим образом:
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
...
}
// Continue only if the File was successfully created
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.example.android.fileprovider",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
String currentPhotoPath;
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
currentPhotoPath = image.getAbsolutePath();
return image;
}
Мы создаем файл непосредственно в Картинках и помещаем uri файла в takePhotoIntent extra, пока мы запускаем намерение и делаем фотографию, фотография исходного размера будет сохранена в директорию Изображения.
Но теперь мы ориентируемся на Android 10, согласно документу, нет необходимости запрашивать разрешение WRITE_EXTERNAL_STORAGE для сохранения фотографии в каталог изображений.
Без разрешения мы не можем создать файл, а затем получить uri файла и поместить его в намерение extra. Так как же сохранить фото в исходном размере?