Я использую простое намерение камеры, следуя базовому руководству по Android. В этом разделе говорится о сохранении файла изображения на диск. Однако я еще не настроил ни один из этих шагов, но после захвата изображения и возврата к моей активности он по-прежнему автоматически сохраняет мое изображение на диск в /storage/emaulated/0/DCIM/Camera. Похоже, это не то, что подразумевается в руководстве - у меня даже нет разрешения WRITE_EXTERNAL_STORAGE в моем манифесте, поэтому я не уверен, почему ему вообще разрешено записывать на диск. Я не хочу, чтобы изображение автоматически сохранялось в этот каталог, а в каталог по моему выбору. Я знаю, как сохранить изображение в пользовательский каталог, но как я могу предотвратить сохранение изображения по умолчанию в указанном выше каталоге?
Почему намерение камеры автоматически сохраняет изображения на диск?
Ответы (4)
Когда вы пытаетесь сделать фото, на самом деле вы начинаете звонить в Camera
приложение, установленное на вашем устройстве. Вы не установили WRITE_EXTERNAL_STORAGE
, да, но приложение Camera
установлено. И когда вы пытаетесь сделать снимок, но хотите сохранить фотографию в свой файл, вы можете попробовать это:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(AVATAR_FILE_TMP));
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true);
startActivityForResult(intent, TAKING_PICTURE_INDEX);
И filePath
- это путь к файлу изображения, который вы берете Camera
. Для фотосъемки используется приложение Camera
.
outputFormat
и noFaceDetection
- person SilentKnight; 21.04.2015
Если вы используете следующий код, он не сохранит фотопленку по умолчанию.
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, receiptUri);
startActivityForResult(takePictureIntent, 1);
Но вам нужно разрешение WRITE в вашем манифесте.
Вот метод, который создает папку с именем для вашего приложения в папке «изображения» на вашей SD-карте. Вы можете изменить его так, чтобы он отражал ваши потребности.
// Create a File for saving an image or video
private static File getOutputMediaFile(int type){
// To be safe, you should check that the SDCard is mounted
// using Environment.getExternalStorageState() before doing this.
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyAppDirectory");
// This location works best if you want the created images to be shared
// between applications and persist after your app has been uninstalled.
// Create the storage directory if it does not exist
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("MyAppDirectory", "failed to create directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
return mediaFile;
}
Вы можете вызвать этот метод, когда вам это нужно:
File file = getOutputMediaFile(MEDIA_TYPE_IMAGE);
прокомментируйте эту строку, если есть
MediaStore.Images.Media.insertImage(getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());