android手机拍照功能遇到的坑(FileUriExposedException)

本文介绍了解决Android 7.0及以上版本中因使用file URI而导致的应用崩溃问题。通过调整URI处理方式,确保应用在新版本系统上能够正常运行。

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

android调取相册崩溃异常:
android.os.FileUriExposedException: file:///storage/emulated/0/1526016747317photo.jpg exposed beyond app through ClipData.Item.getUri();
原因:
android 7.0版本以前
//加载路径
Uri uri = Uri.fromFile(new File(mFilePath));
file文件直接转成url
android 7.0 以后
Android不再允许在app中把file文件直接转成url
解决办法:
/**
 * 打开相机拍照
 */
private String mFilePath = Environment.getExternalStorageDirectory().getPath() + "/" +
        String.valueOf(System.currentTimeMillis()) + "photo.jpg";
private void openCamera() {
       Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      //加载路径
       if(android.os.Build.VERSION.SDK_INT<24){
       Uri uri = Uri.fromFile(new File(mFilePath));
       }else {
       ContentValues contentValues = new ContentValues(1);
       contentValues.put(MediaStore.Images.Media.DATA, mFilePath);
       Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues);}
      //指定存储路径,保存原图 
      openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
      startActivityForResult(openCameraIntent, 6);
}
或者在Application 中加入
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值