为什么相机意图自动将图像保存到磁盘?

时间:2015-04-20 09:16:18

标签: android android-camera android-camera-intent

我在basic tutorial from Android之后使用简单的相机意图。在this section中,它谈到了将映像文件保存到磁盘。但是,我还没有配置任何这些步骤,但在捕获图像并返回我的活动后,它仍然会自动将我的图像保存到/ storage / emaulated / 0 / DCIM / Camera中的磁盘。这似乎并不是本教程所暗示的内容 - 我的清单中甚至没有WRITE_EXTERNAL_STORAGE权限,因此我不确定为什么它甚至可以写入磁盘。我不希望图像自动保存到此目录,而是保存到我选择的目录中。我知道如何将图像保存到自定义目录,但是如何防止将图像保存到上面目录的默认行为?

4 个答案:

答案 0 :(得分:1)

当您尝试接受phto时,实际上您开始调用设备中安装的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 App。

答案 1 :(得分:0)

如果使用以下代码,则不会保存默认的相机胶卷。

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, receiptUri);
startActivityForResult(takePictureIntent, 1);

但你需要在清单中使用WRITE权限。

答案 2 :(得分:0)

这是一种方法,可以在"图片"中创建一个带有应用名称的文件夹。 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);

答案 3 :(得分:0)

如果有

,请评论此行
MediaStore.Images.Media.insertImage(getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());