FileUriExposedException异常

先上解决方法
方法一:

需要在oncreate()函数中添加如下方法即可解决
private void initPhotoError(){
// android 7.0系统解决拍照的问题
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
	StrictMode.setVmPolicy(builder.build());
	builder.detectFileUriExposure();
}

方法二:

	Uri imageUri;
    if (Build.VERSION.SDK_INT >= 24){
            imageUri = FileProvider.getUriForFile(MainActivity.this,
                    "com.example.test.fileprovider",outputImage);
        }else {
            imageUri = Uri.fromFile(outputImage);
        }
记得在AndroidManifest文件中添加
      <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.example.testnotifity.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

如果没有@xml/file_paths文件,可以在res文件夹下新建一个xml文件夹,在xml文件夹里新建一个file_paths文件
在这里插入图片描述
file_paths文件:


<paths>

    <external-path
        path="Android/data/${applicationId}/"
        name="files_root" />
    <external-path
        path="."
        name="external_storage_root" />
</paths>

Android7.0及以上版本调用照相机拍照可能会造成闪退并报FileUriExposedException异常:
在Android7.0以下,以fill://格式的uri包含着文件的真实路径;而在Android7.0版本开始;直接使用本地真实的Uri路径被认为是不安全的,这是由于Google认为目标app可能不具有文件权限;会造成潜在问题,所以会抛出FileUriExposedException异常,
FileProvider是一种特殊的内容提供器,它使用了类似内容提供器类似的机制来对数据进行保护,可选择性的将封装过得Uri共享给外部,从而提高了应用的安全性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值