我正在设置一个应用程序来拍照,保存它们的位置,并在gridview中显示它们。我有一个项目有一个相机图标,点击后将启动相机应用程序。
当我按照示例here时,我收到的错误是关于"未能提供结果信息"。所以我在这里搜索并按照this问题接受了答案。但是,接受的答案是在这里使用decodeFile()对活动结果不断返回null:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_CANCELED) {
if (requestCode == CAPTURE_IMAGE) {
selectedImagePath = getImagePath();
Bitmap newImage = decodeFile(selectedImagePath);
ImageItem takenPhoto = new ImageItem(newImage,"Photo Taken");
gridAdapter.add(takenPhoto);
}
}
}
public Bitmap decodeFile(String path) {
try {
// Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, o);
// The new size we want to scale to
final int REQUIRED_SIZE = 70;
// Find the correct scale value. It should be the power of 2.
int scale = 1;
while (o.outWidth / scale / 2 >= REQUIRED_SIZE && o.outHeight / scale / 2 >= REQUIRED_SIZE)
scale *= 2;
// Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeFile(path, o2);
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
我知道位图为空的原因是由于文件的大小,但我已将其最小化,正如答案所说。
为什么它仍然给我一个空响应?
编辑:
在得到别人的帮助后,我明白了。权限是在<申请>清单中的行,应该在它之前。
答案 0 :(得分:1)
我没有测试它,但我认为错误是由于o.inJustDecodeBounds = true;
为真,直到方法结束。在创建位图之前,您应该将其设置为false。