我有一个非常简单的APP,此刻拍摄照片然后保存图像。目前的问题是,由于某种原因,我找不到图像保存在手机上的位置。
我想要做的最终结果是拍摄照片然后被保存到SD卡上创建的新文件夹中,但如果该文件夹尚未存在则必须是在保存图像之前(自动)制作。
我尝试使用答案in this question但似乎无法在没有收到错误imageIntent cannot be resolved
编辑:图片现在保存到SD卡并创建文件夹但覆盖了以前的图像我需要它来保存多个图像(如果有任何建议代码已更新)
这是我的代码片段:
PictureCallback myPictureCallback_JPG = new PictureCallback(){
public void onPictureTaken(byte[] arg0, Camera arg1) {
// TODO Auto-generated method stub
/*Bitmap bitmapPicture
= BitmapFactory.decodeByteArray(arg0, 0, arg0.length); */
int imageNum = 0;
Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "Punch");
imagesFolder.mkdirs(); // <----
String fileName = "image_" + String.valueOf(imageNum) + ".jpg";
File output = new File(imagesFolder, fileName);
while (output.exists()){
imageNum++;
fileName = "image_" + String.valueOf(imageNum) + ".jpg";
output = new File(imagesFolder, fileName);
}
Uri uriSavedImage = Uri.fromFile(image);
imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
OutputStream imageFileOS;
try {
imageFileOS = getContentResolver().openOutputStream(uriSavedImage);
imageFileOS.write(arg0);
imageFileOS.flush();
imageFileOS.close();
Toast.makeText(AndroidCamera.this,
"Image saved: ",
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();
}};
修改
代码已更新,现在将多个图像保存在SD卡上创建的新文件夹中。
答案 0 :(得分:4)
我纯粹 GUESSING 您忘记了链接到的问题部分的必要代码。
问题在最上面有以下几行:
Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
如果您刚刚从答案中复制了代码,那么您将遇到该错误,因为答案中的代码不包含imageIntent
的实例化。
如果您需要更进一步或者我完全错了,请告诉我。
更新(关于图像被覆盖):
您当前正在使用"image_001.jpg"
作为表示图像名称的字符串。
在班级int imageNum = 0;
中设置变量
然后,您需要使用while循环并增加图像编号 - 或者您可以根据时间为图像创建不同的名称 - 这是另一种方法。
String fileName = "image_" + String.valueOf(imageNum) + ".jpg";
File output = new File(imagesFolder, fileName);
while (output.exists()){
imageNum++;
fileName = "image_" + String.valueOf(imageNum) + ".jpg";
output = new File(imagesFolder, fileName);
}
//now save the file to the sdcard using output as the file
以上代码 - 虽然未经过个人测试 - 应该有效。
答案 1 :(得分:3)
try {
super.onCreate(savedInstanceState);
File root = new File(Environment.getExternalStorageDirectory()
+ File.separator + "Your Floder Name"+ File.separator);
root.mkdirs();
sdImageMainDirectory = new File(root, "myPicName.jpg");
outputFileUri = Uri.fromFile(sdImageMainDirectory);
startCameraActivity();
} catch (Exception e) {
Toast.makeText(this, "Error occured. Please try again later.",
Toast.LENGTH_SHORT).show();
finish();
}
}
protected void startCameraActivity() {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(cameraIntent, 101);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==101 && resultCode==-1)
{
try
{
Uri outputFileUri= data.getData();
selectedImagePath=getPath(outputFileUri);
}
catch(Exception ex)
{
Log.v("OnCameraCallBack",ex.getMessage());
}
}
答案 2 :(得分:2)
您可以保存多张图片。每次捕捉照片时,你都会犯一个错误,文件夹会一次又一次地重新创建。
所以你必须检查文件夹是否已经存在。你只需要添加一行代码
if (!imagesFolder.exists()) {
imagesFolder.mkdirs();
}
else { //do nothing}