从Camera意图结果中获取路径和文件名

时间:2011-10-03 14:53:14

标签: android camera android-intent uri image

我想用相机意图拍照并将其保存到默认的DCIM文件夹中。然后我想得到存储图片的路径/文件名。

我正在尝试使用以下代码:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE);

使用此代码,相机打开,在我拍完一张照片后关闭并将照片保存到默认的图像文件夹(通常是/ dcim / camera或sdcard / dcim / camera ......)

但是如何获取拍摄照片的路径和文件名呢? 我在onActivityResult尝试了几乎所有的东西 我试过了

String result = data.getData();

String result = data.getDataString();

String result = data.toURI();

Uri uri = data.getData();

我研究了过去两天为此找到解决方案,网上和stackoverflow上有很多文章,但没有任何作用。 我不想要缩略图,我只想要路径(uri?)到相机拍摄的图像。

感谢您的帮助

编辑: 当我尝试:

path=Environment.DIRECTORY_DCIM + "/test.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, TAKE_PICTURE); 

它不会将图像存储为test.jpg但是使用正常的图像名称2011-10-03 ..... jpg(但也没关系,我只需要图像的路径,这没关系这个名字是什么。)

祝你好运

再次编辑

path=Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
File file = new File(path,"test111111111.jpg");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

startActivityForResult(intent, TAKE_PICTURE); 

当我尝试这个时,它会将图像存储到正确的文件夹并使用给定的名称(例如test111111.jpg)。 但是如何在onActivityResult中获取文件路径?

3 个答案:

答案 0 :(得分:6)

图片将被存储两次,首先存储在gallery文件夹中,然后存储在您在putExtra(MediaStore.EXTRA_OUTPUT,path)方法上指定的文件之后。

您可以获取拍摄的最后一张照片:

/**
 * 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;
    }
}

此示例基于帖子:Deleting a gallery image after camera intent photo taken

答案 1 :(得分:1)

你可以在onActivityResult()

中使用这样的东西
if(requestCode==CAMERA_CAPTURE)
    {

        Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC");
        if(cursor != null && cursor.moveToFirst())
        {
            do 
            {
                String picturePath =cursor.getString(cursor.getColumnIndex(Media.DATA));
               Uri selectedImage = Uri.parse(picturePath);

            }
            while(cursor.moveToNext());
                cursor.close();
            File out = new File(picturePath);
            try 
            {
                mOriginal = decodeFile(out);
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            mSelected.setImageBitmap(mOriginal);
        }
    }

答案 2 :(得分:0)

当您开始ACTION_IMAGE_CAPTURE时,您可以传递额外的MediaStore.EXTRA_OUTPUT作为要保存图片的文件的URI

这是一个简单的例子:

   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, TAKE_PICTURE); 

编辑:我刚尝试使用我的设备而file.createNewFile()为我解决了这个问题。