网易云Android 7.0拍照失败

最近在做及时通讯,选择了网易云通讯,但是在拍照的时候,提示"SD卡被拔出或存储空间不足,无法保存头像",


网易云Android 7.0拍照失败_第1张图片
报错截图

联系技术支持,居然让我重启手机试一下,说他也没遇到过,太不靠谱,看来展现自己才华的时候到了,于是定位到错误的代码

      try {
            String outPath = getIntent().getStringExtra(Extras.EXTRA_FILE_PATH);
            if (TextUtils.isEmpty(outPath)) {
                Toast.makeText(this, R.string.sdcard_not_enough_error, Toast.LENGTH_LONG).show();
                finish();
                return;
            }
          //7.0前当你跨package域传递file://的URI---------
           File outputFile = new File(outPath);
           Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
           intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outputFile));
            startActivityForResult(intent, REQUEST_CODE_CAMERA);
          //7.0前当你跨package域传递file://的URI----------
        } catch (ActivityNotFoundException e) {
            finish();
        } catch (Exception e) {
            e.printStackTrace();
            Log.i("ExternalStorage",e.getMessage());
            Toast.makeText(this, R.string.sdcard_not_enough_head_error, Toast.LENGTH_LONG).show();
            finish();
        }

发现是这块出现了异常,android.os.FileUriExposedException,7.0之后跨package传递file uri官方推荐的方式是使用FileProvider,当然你也可以使用ContentProvider。将上面代码改成:

            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            ContentValues contentValues  = new ContentValues();
            contentValues.put(MediaStore.Images.Media.DATA, outPath);
            Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
            startActivityForResult(intent, REQUEST_CODE_CAMERA);

问题成功解决。
如果你也在做即时通讯,也集成网易云遇到这个问题,帮到了您,请点个赞,传递正能量。

你可能感兴趣的:(网易云Android 7.0拍照失败)