解决Android7.0以上系统拍照闪退及拍照后、选取相册剪裁后闪退问题

做了一个拍照及从相册调用图片作为头像的功能:
一开始代码写好在Android6.0系统上正常运行,换了Android8.0 9.0就闪退了,那问题就是版本不兼容问题了,

一、首先在onCreate方法中加入了以下代码,判断系统大于6.0

//android 7.0系统以上解决拍照的问题
        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
        StrictMode.setVmPolicy(builder.build());
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                builder.detectFileUriExposure();
            }
        }

二、解决了这个之后,能打开相机了,但是,,,拍照完毕后以及从相册选取完照片后,不能调取剪裁,于是在onActivityResult回调方法中及剪裁方法cropPhoto中 又加了几行代码

 //处理手机不兼容问题
                    try {
                        head = BitmapFactory.decodeStream(getContentResolver().openInputStream(uritempFile));
                        verifyStoragePermissions(this);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
uritempFile=uri;

并且千万千万要注释掉这下面两条代码:

// head = extras.getParcelable("data");          
//intent.putExtra("return-data", true);

下面是比较完整的代码:

 protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case CROP_PHOTO1:
                if (resultCode == RESULT_OK) {
                    cropPhoto(data.getData()); //裁剪图片
                }
                break;
            case CROP_PHOTO2:
                if (resultCode == RESULT_OK) {
                    File temp = new File(Environment.getExternalStorageDirectory() +"/"+
                            spUserName+"_head.jpg");
                    cropPhoto(Uri.fromFile(temp)); //裁剪图片
                }
                break;
            case SAVE_PHOTO:
                if (data != null) {
                    Bundle extras = data.getExtras();
                  // head = extras.getParcelable("data");
                    //处理手机不兼容问题
                    try {
                        head = BitmapFactory.decodeStream(getContentResolver().openInputStream(uritempFile));
                        verifyStoragePermissions(this);
                    } catch (FileNotFoundException e) {
   
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值