2012-07-06 52 views
3

我想了解如何在我的android应用程序中使用相机。我现在有一个覆盖按钮的工作预览。我已经设置成可以成功拍摄照片,但是当我尝试将照片保存到SD卡时,它无法正常工作。它总是会返回“保存期间的错误”。Android:保存照片用户使用相机

我知道这不是我的SD卡,而且我在另一个应用程序中使用几乎相同的确切代码来保存位图,该位图可以成功运行。

我也知道它正在成功拍照,因为我通过将照片放入活动中的ImageView来测试它。

我不知道为什么这不起作用。

Button takePhoto = (Button)findViewById(R.id.takephoto); 
    takePhoto.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 



      mCamera.takePicture(shutterCallback, rawCallback, 
        jpegCallback); 




     } 
    }); 




} 


ShutterCallback shutterCallback = new ShutterCallback() { 
    public void onShutter() { 

    } 
}; 

/** Handles data for raw picture */ 
PictureCallback rawCallback = new PictureCallback() { 
    public void onPictureTaken(byte[] arg0, Camera camera) { 



    } 
}; 

/** Handles data for jpeg picture */ 
PictureCallback jpegCallback = new PictureCallback() { 
    public void onPictureTaken(byte[] arg0, Camera camera) { 

     Bitmap photo = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); 

     tempSavePhoto(photo); 

     switchToPolaroidView(); 

    } 
}; 



public void tempSavePhoto(Bitmap photo){ 

    File root = new File(Environment.getExternalStorageDirectory() + File.separator + "Photos"); 
    File image = new File(root, "toSend.jpg"); 
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); 

    boolean success = false; 

    FileOutputStream outStream; 
    try { 

     outStream = new FileOutputStream(image); 
     photo.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
     /* 100 to keep full quality of the image */ 

     outStream.flush(); 
     outStream.close(); 
     success = true; 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    if (success) { 
     Toast.makeText(getApplicationContext(), "Saved successfully", 
       Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(getApplicationContext(), 
       "Error during image saving", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

什么是logcat错误? – kosa 2012-07-06 21:09:07

+0

没有错误。它只是不保存。我得到敬酒告诉我,程序 – SillyFidget 2012-07-06 21:15:24

回答

1

我尝试了不同的方法,它工作。不知道为什么另一个不工作,但它现在保存照片就好了。以下是我代替:

public void tempSavePhoto(Bitmap photo){ 

    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    photo.compress(Bitmap.CompressFormat.JPEG, 40, bytes); 


    File f = new File(Environment.getExternalStorageDirectory() 
          + File.separator + "test.jpg"); 
    try { 
     f.createNewFile(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    FileOutputStream fo = null; 
    try { 
     fo = new FileOutputStream(f); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    try { 
     fo.write(bytes.toByteArray()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); 


} 

请注意,我有这个想法从this post,并投了,帮助我的答案。

1

添加到您的清单

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

它更可能,这个应用程序没有权限保存到你的其他做的SD卡。添加此授予权限

+0

中有一个错误,我已经将此添加到清单。谢谢你 – SillyFidget 2012-07-06 21:04:36

相关问题