从相机获取全尺寸图像对Galaxy S无效

时间:2010-09-27 16:31:12

标签: android camera

我在使用Samsung Galaxy S上的内置相机应用程序捕获图像时遇到问题。

我的应用程序上有一个按钮,按下后会启动相机:

ContentValues values = new ContentValues();
values.put(Images.Media.MIME_TYPE, "image/jpeg");

mPicUri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);

intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mPicUri.getPath());
startActivityForResult(intent, REQ_CODE_TAKE_PIC);

根据我在interwebz上看到的内容,我可以使用传递给intent的URI获取全尺寸刚刚拍摄的照片。所以我在onActivityResult上有这个:

Uri selectedImage = mPicUri;
String[] filePathColumn = {MediaStore.Images.Media.DATA};

Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();

然后使用变量filePath,我在ImageView中设置图像。我没有获得任何图片,当我逐步完成代码时,我发现BitmapFactory.decodeFile()正在返回null

Bitmap chosenPic = BitmapFactory.decodeFile(filePath);

所以我尝试了一些调试。我发现mPicUri返回一个看似有效的URI,例如:content://media/external/images/media/90。拍摄照片并且用户选择保存图片后,光标将解析为以下filePath:/sdcard/DCIM/Camera/1285601413961.jpg。虽然没有解码位图,但是当我浏览图库时,我刚刚拍摄的照片就在那里。所以我试着看看那张图片的URI,这就是我得到的:

URI is:           content://media/external/images/media/91
File path is:     /sdcard/DCIM/Camera/2010-09-27 23.30.30.jpg

所以,看起来我从mPicUri获得的值不是将要使用的 final URI。

我在这里错过了一步吗?我真正想做的就是检索刚刚拍摄的照片的文件。

提前致谢, Zarah。

1 个答案:

答案 0 :(得分:0)

你是否尝试在拍摄之前在两种情况下都指定文件,之后是否相同?

public static File getTempFile() {
    //it will return /sdcard/image.jpg
    final File path = new File(Environment.getExternalStorageDirectory(), "MyApp");
    if (!path.exists()) {
        path.mkdir();
    }
    return new File(path, "image.jpg");
}

我正在使用此功能来获取和设置文件路径。