问题描述:
take photo -> 拍照 -> 确定 -> 截图 -> 保存,此时返回给onActivityResult的resultCode是0,截图无效。我查看图片储存的情况,拍完照是有存储好的,但截图后没有存储,图片变成了0byte。
原因:
private void cropImageUri(Uri uri, int requestCode){
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra("return-data", false);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // no face detection
startActivityForResult(intent, requestCode);
}
裁减时打开图片的uri与保存图片的uri相同,产生冲突,导致裁减完成后图片的大小变成0Byte。
解决办法:
法一:可将相机照片保存在另外的位置,将intent.setDataAndType(uri, "image/*");中的uri换成相机照片倮存的路径即可。
法二:将intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);中的uri换成裁剪后要保存的路径即可。
总结:总之,就是intent.setDataAndType(uri, "image/*");和intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);中uri的地址必须是不同的。