从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=-1
和data=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