如何捕捉图像并将其与原生Android Camera一起存储

我有一个问题捕捉图像,并从本机相机应用程序存储它。 这里是我的一些代码的示例。

_path = Environment.getExternalStorageDirectory() + "make_machine_example.jpg"; File file = new File( _path ); Uri outputFileUri = Uri.fromFile( file ); Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE ); intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri ); startActivityForResult( intent, 0 ); 

照片拍完后,我回到我原来的活动,当我通过Android DDMS文件浏览器导航到我的SD卡的图片不存在。 任何人都知道为什么这不被保存?

你是否检查过Environment.getExternalStorageDirectory()的输出是什么,因为如果它没有包含尾随文件分隔符(/),那么你的映像将会在一个不在SD卡上的目录中,例如:

  /mnt/sdcardmake_machine_example.jpg 

当你真正想要的是:

  /mnt/sdcard/make_machine_example.jpg 

试试这个代码:

  _path = Environment.getExternalStorageDirectory() + File.separator + "make_machine_example.jpg"; 

这是最后的产品,以防万一还在访问这个主题:

 public class CameraCapture extends Activity { protected boolean _taken = true; File sdImageMainDirectory; protected static final String PHOTO_TAKEN = "photo_taken"; @Override public void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); File root = new File(Environment .getExternalStorageDirectory() + File.separator + "myDir" + File.separator); root.mkdirs(); sdImageMainDirectory = new File(root, "myPicName"); startCameraActivity(); } } catch (Exception e) { finish(); Toast.makeText(this, "Error occured. Please try again later.", Toast.LENGTH_SHORT).show(); } } protected void startCameraActivity() { Uri outputFileUri = Uri.fromFile(sdImageMainDirectory); Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(intent, 0); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { case 0: finish(); break; case -1: try { StoreImage(this, Uri.parse(data.toURI()), sdImageMainDirectory); } catch (Exception e) { e.printStackTrace(); } finish(); startActivity(new Intent(CameraCapture.this, Home.class)); } } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { if (savedInstanceState.getBoolean(CameraCapture.PHOTO_TAKEN)) { _taken = true; } } @Override protected void onSaveInstanceState(Bundle outState) { outState.putBoolean(CameraCapture.PHOTO_TAKEN, _taken); } public static void StoreImage(Context mContext, Uri imageLoc, File imageDir) { Bitmap bm = null; try { bm = Media.getBitmap(mContext.getContentResolver(), imageLoc); FileOutputStream out = new FileOutputStream(imageDir); bm.compress(Bitmap.CompressFormat.JPEG, 100, out); bm.recycle(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } 

1。 只是使用

 new File(Environment.getExternalStorageDirectory(), "make_machine_example.jpg"); 

不要担心分离器。

2。 面临同样的问题。 SenseUI手机有一个不创build文件的自定义相机应用程序。 你在用什么设备? 它可能已经在最新的设备中被修复,但它也可能是一个问题。 所以这里有一个完整的示例如何克服它将照片保存到文件的问题 。

保存图像后应执行介质扫描

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

将此行添加到AndroidManifest.xml文件中,并删除扩展名make_machine_example:

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

它将开始捕捉照片并存储到SD卡中。