用相机意图拍照并保存到文件

可能重复:
Android Camera – 将图像保存到SD卡中的新文件夹中

我正在尝试拍照并将其保存到文件中。 问题出现了我试图将位图保存到文件。 这是我的代码:

private void takePic() { Intent cameraIntent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, 2); } public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 2) { Bitmap photo = (Bitmap) data.getExtras().get("data"); ImageView test = (ImageView) findViewById(R.id.test); test.setImageBitmap(photo); try { FileOutputStream out = new FileOutputStream("filename"); photo.compress(Bitmap.CompressFormat.JPEG, 90, out); } catch (Exception e) { e.printStackTrace(); } } } 

和logcat中的exception:

 04-02 14:46:51.975: W/IInputConnectionWrapper(2225): showStatusIcon on inactive InputConnection 04-02 14:46:56.135: W/System.err(2225): java.io.FileNotFoundException: /filename (Read-only file system) 04-02 14:46:56.135: W/System.err(2225): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method) 04-02 14:46:56.145: W/System.err(2225): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232) 04-02 14:46:56.145: W/System.err(2225): at java.io.FileOutputStream.(FileOutputStream.java:94) 04-02 14:46:56.145: W/System.err(2225): at java.io.FileOutputStream.(FileOutputStream.java:165) 04-02 14:46:56.145: W/System.err(2225): at java.io.FileOutputStream.(FileOutputStream.java:144) 

以下代码是您的问题的解决方案之一::

 static Uri capturedImageUri = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.imageView = (ImageView) this.findViewById(R.id.imageView1); Button photoButton = (Button) this.findViewById(R.id.button1); photoButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Calendar cal = Calendar.getInstance(); File file = new File(Environment.getExternalStorageDirectory(), (cal.getTimeInMillis() + ".jpg")); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { file.delete(); try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } capturedImageUri = Uri.fromFile(file); Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); i.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri); startActivityForResult(i, CAMERA_RESULT); } }); protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAMERA_REQUEST) { //Bitmap photo = (Bitmap) data.getExtras().get("data"); //imageView.setImageBitmap(photo); try { Bitmap bitmap = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), capturedImageUri); imageView.setImageBitmap(bitmap); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

你的错误清楚地说明了java.io.FileNotFoundException: /filename

请提供确切的路径“/ sdcard / filename”

 new FileOutputStream(getExternalStorageDirectory()+"filename"); 

要么

 String imageFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/name.png"; 

注意:在清单文件中添加权限WRITE_EXTERNAL_STORAGE。