您好我使用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
方法检索该图像的路径。我不知道如何获取当前捕获图像的图像路径。
如果有人知道请帮助。
由于
答案 0 :(得分:50)
这是它在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获取文件路径:
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.getData()中推断出图像/视频URI,正如在
下所描述的那样Android ACTION_IMAGE_CAPTURE Intent
但是,由于此部分受制造商调整,您可能仍会遇到“旧”方法可能有用的手机。
答案 1 :(得分:7)
在Android 2.1上测试的另一种方法是获取画廊最后一张图像的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) } );
}
此代码基于帖子:Deleting a gallery image after camera intent photo taken
答案 2 :(得分:2)
这个问题已经很久了,但我已经和同样的问题争斗了半天。问题是,除非您在ACTION_IMAGE_CAPTURE
文件中为应用设置了以下权限,否则code=-1
意图将始终返回data=null
和AndroidManifest.xml
:
<uses-permission android:name="android.permission.CAMERA"/>
如果要录制应用程序中的音频,也可以设置以下内容:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
答案 3 :(得分:2)
删除
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
并添加
Uri uri = data.getData();in onActivityResult