我的问题
我有一个摄像头意图,我想将图像保存到我的内部数据目录中的目录。
我使用以下方法创建了目录:
File mydir3 = new File(this.getApplicationContext().getFilesDir(),File.separator+"MyApplication"+File.separator+CCPhotoManager.DIRECTORY+File.separator+PhotoManager);
mydir3.mkdirs();
然后我继续创建具有指定名称的文件,如下所示。
String filePath = this.getApplicationContext().getFilesDir()+File.separator+"MyApplication"+File.separator+PhotoManager+File.separator+PhotoManager().getNewPhotoFileName()+PhotoManager;
File file = new File(filePath);
然后我在某地读到,图像未被保存的原因是因为相机无权访问我的应用程序数据目录,并且您需要使用FileOutputStream
来更改权限。但是,由于我的文件路径有路径分隔符,我无法使用openFileStream(filePath,Context.MODE_WORLD_WRITABLE);
。
这就是我尝试以下的原因。
try {
FileOutputStream fos = new FileOutputStream(file);
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
然而,这显然不起作用,因为没有图像保存到使用下面的代码创建的文件中。
Uri uriSavedImage=Uri.fromFile(file);
Log.d("PhotoManager", "adding extra to intent: "+uriSavedImage.toString());
Intent launchcameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
launchcameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
startActivityForResult(launchcameraIntent,CAMERA_PIC_REQUEST);
我的问题
如何让相机有意将其图像保存到我的内部数据中的自定义目录?
提前致谢
答案 0 :(得分:1)
我有同样的问题一次,我解决了这个问题:
1.从存在于默认文件夹中的图像创建文件:
File from = new File("path to default file created");
这里的代码路径被描述为filepath。
2.创建另一个文件,将文件保存为:
File to = new File("target file path");
3.将文件重命名为:
from.renameTo(to);
使用此功能,默认路径中的文件将自动删除并在新路径中创建。
感谢
答案 1 :(得分:1)
所以这就是我解决它的方式。还要感谢@AppMobiGurmeet。
将照片保存到SDCard上的文件中,如下所示。
File directory= new File(Environment.getExternalStorageDirectory()+File.separator+"MyApplication"+File.separator+"TemporaryImages");//+File.separator+CCPhotoManager.getInstance().getNewPhotoFileName()+CCPhotoManager.JPEG_FILE_SUFFIX);
directory.mkdirs();
File externalFile = new File(Environment.getExternalStorageDirectory()+File.separator+"MyApplication"+File.separator+"TemporaryImages"+File.separator+CCPhotoManager.getInstance().getNewPhotoFileName()+CCPhotoManager.JPEG_FILE_SUFFIX);
Uri uriSavedImage=Uri.fromFile(externalFile);
Log.d("PhotoManager", "adding extra to intent: "+uriSavedImage.toString());
Intent launchcameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
launchcameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
startActivityForResult(launchcameraIntent,CAMERA_PIC_REQUEST);
然后是活动结果。 (当意图被退回时)
// SAVE THE PHOTO TO THE INTERNAL DATA DIRECTORY
File to = new File(MyApplication.getAppContext().getFilesDir()+File.separator+"MyApplication"+File.separator+DIRECTORY+File.separator+this._currentPhotoName+JPEG_FILE_SUFFIX);
File from = new File(Environment.getExternalStorageDirectory()+File.separator+"MyApplication"+File.separator+"TemporaryImages"+File.separator+this._currentPhotoName+JPEG_FILE_SUFFIX);
try {
FileChannel destination = new FileOutputStream(to).getChannel();
FileChannel source = new FileInputStream(from).getChannel();
if (destination != null && source != null) {
destination.transferFrom(source,0,source.size());
from.delete();
}
destination.close();
source.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
然而,我已经决定,在所有这些事情发生之后,内部数据目录不是存储图像和文件之类的最佳位置,因为在某些设备上,内部空间非常少(三星) Galaxy Ace约200MB)。
我希望这有助于某人。