将拍摄的照片保存到特定文件夹

Posted

技术标签:

【中文标题】将拍摄的照片保存到特定文件夹【英文标题】:saving photos taken to a specific folder 【发布时间】:2012-03-25 04:36:48 【问题描述】:

我需要一些帮助,将我的相机拍摄的照片保存到 SD 卡上的特定文件夹中。我的相机打开,拍照并保存;但它会将它们保存到标准文件夹中。我的代码是:

public class Camera extends Activity 
public static final int MEDIA_TYPE_IMAGE = 1;
public static final int MEDIA_TYPE_VIDEO = 2;
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
String Path;
private Uri fileUri;

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    Bundle extras=getIntent().getExtras();
    Path= extras.getString("Path");
    Log.d("camear","path: "+Path);
    //File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyCameraApp");

    Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
        this.startActivity(intent);
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    //mediaFile = new File(mediaStorageDir.getPath() + File.separator +"IMG_"+ timeStamp + ".jpg");

    //fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
    Uri outputFileUri= Uri.fromFile(new File(Path+"/camera/"+timeStamp+".jpg"));// create a file to save the image
    intent.putExtra("output", outputFileUri); // set the image file name

    // start the image capture Intent
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

路径来自应用程序上的另一个活动,它可以很好地传递它的值。在上一个活动中,它创建了我想要保存图片的文件夹。

我查看了以下答案,并尝试实施一些建议:How to save images from Camera in android to specific folder?。我没有尝试的一件事是在 OnActivityResult 的最后一个建议中。那是钥匙还是我还缺少其他东西?这个页面在这里提到了 ContentResolver The Camera Intent is simply not working,一件事是两个页面看起来都想做同样的事情,但是以不同的方式去做。

【问题讨论】:

保罗,添加这个intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 您是建议将其添加到文件中还是替换我已经拥有的其他 intent.putExtra?当我尝试添加和或替换它时,仍然会这样做。使用我的调试器,我看到 outputFileUri 指向:file:///mnt/sdcard/BucketMonkey/32rm215/camera。将相机的最后一个文件添加到路径中只是标准吗?我没有包含相机的路径的 mkdir,这会导致我的问题吗? 我不能编辑我以前的帖子,但忽略我关于相机附在最后的评论,那是我自己的错。但即使路径是合法文件夹,它仍然保存在主相机文件夹中。 你能粘贴你的 onActivityResult(int requestCode, int resultCode, Intent data) 【参考方案1】:

我发现我做错了什么。如果你看代码,我犯了两个错误。第一个错误是我的路径。我从上一个活动中获得了正确的路径,但是我没有在此处创建文件夹路径。这是对我有用的代码:

File Folder=new File(Path);
File picFile= new File(Folder.getPath()+"/"+timeStamp+".jpg");

第一行检查文件夹,第二行使用文件夹的路径创建文件。我没有任何一部分。如果它没有找到路径,它只是想保存就保存。

我遇到的另一个问题是我的 Intent 调用,我使用了:MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA。这没有任何@Overrides 显然就像保存在其文件夹中的实际相机一样。我将其更改为: MediaStore.ACTION_IMAGE_CAPTURE,这让我有更多的控制权。

我遇到并发现的另一个问题是 ACTION_IMAGE_CAPTURE,它需要并关闭。但是,如果您使用从相机应用程序返回的结果代码实现 onActivityResult,您可以重新调用相机并使其再次运行,或者您可以将其关闭并返回到另一个活动。这不是原始问题的一部分,而是我遇到的问题。

【讨论】:

你能发布解决方案吗?

以上是关于将拍摄的照片保存到特定文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Android - 通过 Intent 拍摄照片并使用自定义名称将它们保存到自定义目的地

将其他相机拍摄的 DNG(原始照片)保存到 iOS 照片库

用相机意图拍摄照片并将其保存到文件中

如何以照片的拍摄时间批量重命名文件

使用覆盖将图像保存到文档目录

三星es28拍摄的照片总保存在一个文件里 导致打开文件很慢 怎么样使照的照片