我在使用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。
答案 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");
}
我正在使用此功能来获取和设置文件路径。