从ACTION_IMAGE_CAPTURE意图获取图像的path

您好我正在使用ACTION_IMAGE_CAPTURE捕获图像使用Intent如下:

 Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra( MediaStore.EXTRA_OUTPUT, (new File(Environment.getExternalStorageDirectory(), String.valueOf(System.currentTimeMillis()) + ".jpg")) ); startActivityForResult(cameraIntent, 0); 

我需要将图像存储在SD卡中,并使用onActivityResult方法检索该图像的path。 我不知道如何获取当前捕获的图像的图像path。

如果有人知道请帮忙。

谢谢

这是如何工作在2.2(不同于以前的版本)。 当开始意图

  String fileName = "temp.jpg"; ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, fileName); mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); startActivityForResult(intent, CAPTURE_PICTURE_INTENT); 

你需要记住mCapturedImageURI

当你捕捉图像时,在onActivityResult()使用该URI来获取文件path:

  String[] projection = { MediaStore.Images.Media.DATA}; Cursor cursor = managedQuery(mCapturedImageURI, projection, null, null, null); int column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String capturedImageFilePath = cursor.getString(column_index_data); 

更新:在新的Android设备上,您不需要MediaStore.EXTRA_OUTPUT,但是您更倾向于从onActivityResult(…,Intent data)接收到的data.getData()中推导出图像/videoURI,如下所示

Android ACTION_IMAGE_CAPTURE意图

然而,由于这部分是适应制造商,您可能仍然会遇到“旧”的方法可能有用的电话。

另一种方法,在android 2.1上testing,取最后一张图片的ID或AbsolutePath。

可以这样做:

 /** * Gets the last image id from the media store * @return */ private int getLastImageId(){ final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA }; final String imageOrderBy = MediaStore.Images.Media._ID+" DESC"; Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy); if(imageCursor.moveToFirst()){ int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID)); String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA)); Log.d(TAG, "getLastImageId::id " + id); Log.d(TAG, "getLastImageId::path " + fullPath); imageCursor.close(); return id; }else{ return 0; } } 

并删除文件:

 private void removeImage(int id) { ContentResolver cr = getContentResolver(); cr.delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.Media._ID + "=?", new String[]{ Long.toString(id) } ); } 

此代码基于post: 拍摄相机意向照片后删除图库图像

这个问题很古老,但是我一直在和同样的问题争吵半天。 问题是你的ACTION_IMAGE_CAPTURE意图将始终返回code=-1data=null除非在AndroidManifest.xml文件中为应用程序设置了以下权限:

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

如果要从应用程序录制audio,还可以设置以下内容:

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

去掉

 intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); 

并添加

 Uri uri = data.getData();in onActivityResult