Android多层嵌套Fragment中调用系统相机拍照以及裁剪的相关问题解决

本文记录了在Android应用中,多层嵌套Fragment调用系统相机拍照、裁剪时遇到的问题及解决方法。主要问题是界面销毁后,拍照后无法正确回调裁剪功能。解决方案包括在父Activity中处理拍照和裁剪操作,通过EventBus传递信息,以及使用静态变量保存照片路径等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多层嵌套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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值