多层嵌套Fragment中调用系统相机拍照、裁剪
最近公司项目有频繁使用相机拍照的需求,然后频繁的实际使用过程中遇到很多大大小小的坑,在此记录下。
(ps.关于一些拍照后图片旋转、裁剪设置返回数据为true造成崩溃等等问题网上相关链接很多在此不做赘述)。
拍照、裁剪操作中出现的错误可参考这篇文章:
——http://blog.youkuaiyun.com/lang791534167/article/details/39647263
主要问题
由于是在主界面的Activity中的一个Fragment模块下包含Viewpager,ViewPager的两个子页为第二层Fragment,拍照功能在第二层Fragment中。然后程序意外结束候程序被重建不能收到回调及回调返回不正确导致拍照后无法调起裁剪功能(看起来就是闪退到了之前的界面)
先上代码吧
之前的写法是直接在Fragment中调用系统相机,拍照和裁剪的路径都做了本地保存,然后通过路径取照片进行操作:
/**
* 调用系统相机拍照
*/
private void startTakePhoto() {
// 先判断设备是否有SD卡,如果没有则不能拍照
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
String savePath = CameraUtils.BASE_PATH + CameraUtils.PHOTO_PATH;
File savedir = new File(savePath);
if (!savedir.exists()) {
savedir.mkdirs();
}
String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
String fileName = timeStamp + ".jpg";// 照片命名
File out = new File(savePath, fileName);
Uri uri = Uri.fromFile(out);
origUri = uri;//保存到成员变量
origAbsPath = savePath + fileName;// 该照片的绝对路径
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
this.startActivityForResult(intent, ImageUtils.REQUEST_CODE_GETIMAGE_BYCAMERA);
} else {
UDreamToast.showToast( getActivity(), "未检测到SD卡", UDreamToast.TOAST_TYPE_WARNING);
}
}
/**
* 接收回调
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != Activity.RESULT_OK) {
return;
}
switch (requestCode) {
case ImageUt