我在从 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 上读到的内容,我可以使用传递给意图的 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
。拍照后用户选择保存图片,光标解析为以下文件路径:/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。
我在这里错过了一步吗?我真正想做的就是检索刚刚拍摄的照片的文件。
提前致谢,
扎拉。