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

3
可能重复问题:
如何将相机结果作为数据文件夹中的URI获取? 我正在拍照,并将其保存在默认文件夹中。
这是我的PictureCallBack()函数:
PictureCallback myPictureCallback_JPG = new PictureCallback(){

        public void onPictureTaken(byte[] arg0, Camera arg1) {       

          Uri uriTarget = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues());

          OutputStream imageFileOS;

          try {

           imageFileOS = getContentResolver().openOutputStream(uriTarget);
           imageFileOS.write(arg0);
           imageFileOS.flush();
           imageFileOS.close();

           Toast.makeText(MainActivity.this,"Image saved: " + uriTarget.toString(),Toast.LENGTH_LONG).show();

          } catch (FileNotFoundException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
          } catch (IOException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
          }

          camera.startPreview();
         }
    };

我该如何将它保存到特定文件夹,例如"/sdcard/MyCustonApp/Photos/"
4个回答

4

添加到你的代码中

    String path = Environment.getExternalStorageDirectory().toString();
    File myNewFolder = new File(path + "/your/folder");
    myNewFolder.mkdir();
    File file = new File(path + "/your/folder", name    + ".png");
    OutputStream imageFileOS = new FileOutputStream(file);

1
不错,但现在图片在画廊中不显示或者显示需要很长时间。你有什么想法我做错了什么吗? - Bruno Almeida
1
要在画廊中显示图片,必须将带有图像的文件添加到画廊中:MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName())。 - prozhyga
你是怎么解决的?能把你的代码都复制在这里吗?! - محمد

1
这是我检查要保存捕获图像的文件夹是否存在,或者在不存在时创建该文件夹的方法。
Intent getCameraImage = new Intent("android.media.action.IMAGE_CAPTURE");

File cameraFolder;

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
    cameraFolder = new File(android.os.Environment.getExternalStorageDirectory(),"MyCustomApp/Photos");
else
    cameraFolder = StatusUpdate.this.getCacheDir();
if(!cameraFolder.exists())
    cameraFolder.mkdirs();

File photo = new File(Environment.getExternalStorageDirectory(), "MyCustomApp/Photos/camera_snap.jpg");
getCameraImage.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
Uri uri = Uri.fromFile(photo);

startActivityForResult(getCameraImage, 1);

这段代码将把捕获的图像保存到指定文件夹中,文件名为camera_snap,扩展名为.jpg
注意:这需要您在Manifest文件中声明以下权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我没有使用意图,我正在制作一个自定义相机应用程序。但是您检查文件夹是否存在的方法非常有用。谢谢! - Bruno Almeida
@BrunoAlmeida:哦,我的错。很高兴有些东西是有用的。 :-) - Siddharth Lele

1
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages");
imagesFolder.mkdirs(); 
File image = new File(imagesFolder, "image.jpg");
Uri uriSavedImage = Uri.fromFile(image);
imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);

请查看此链接。如何将Android相机中的图像保存到特定文件夹中?


谢谢,确实是这样,但是有人在我之前回答了! - Bruno Almeida

0

尝试这个简单的代码,将图像存储在一个文件夹中:

String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/req_images");
myDir.mkdirs();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Image-" + n + ".jpg";
file = new File(myDir, fname);
Log.i(TAG, "" + file);
if (file.exists())
file.delete();
try {
FileOutputStream out = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}

其中bm表示位图图像名称


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接