网易云Android 7.0拍照失败
2017-07-28 本文已影响160人
那个阳光下奔跑的少年
最近在做及时通讯,选择了网易云通讯,但是在拍照的时候,提示"SD卡被拔出或存储空间不足,无法保存头像",
![](https://img.haomeiwen.com/i1718943/212ae614a8aee2a6.jpg)
联系技术支持,居然让我重启手机试一下,说他也没遇到过,太不靠谱,看来展现自己才华的时候到了,于是定位到错误的代码
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);
问题成功解决。
如果你也在做即时通讯,也集成网易云遇到这个问题,帮到了您,请点个赞,传递正能量。