24

嗨,我正在使用如下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);

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

如果有人知道请帮忙。

谢谢

4

4 回答 4

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) 收到的 data.getData() 中推断图像/视频 URI,如下所述

Android ACTION_IMAGE_CAPTURE 意图

但是,由于这部分取决于制造商的调整,您可能仍然会遇到“旧”方法可能有用的手机。

于 2010-11-15T14:53:29.590 回答
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) } );
}

此代码基于帖子:在拍摄相机意图照片后删除图库图像

于 2012-01-30T16:30:23.440 回答
2

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

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

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

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
于 2012-04-25T09:32:53.887 回答
2

消除

intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);  

并添加

Uri uri = data.getData();in onActivityResult
于 2015-12-05T21:25:13.603 回答