android.os.FileUriExposedException: exposed beyond app through ClipData.Item.getUri()踩坑记录


最近项目中图片选择器的UI定制程度较高,在网上没找到合适的库,于是自己着手写一个

过程中打开相机程序的时候遇到了个问题,系统报错:

android.os.FileUriExposedException:+文件名+  exposed beyond app through ClipData.Item.getUri()

上网查了一下,发现是因为参考了老版的第一行代码...没有对Android7.0以上的情况做适配导致的

FileUriExposedException字面意思是,文件Uri暴露异常,当你的应用把file:// Uri暴露给其他App的时候就会出现这种异常,因为接收方App可能并不具备访问该共享资源的权限。所以应该用content:// Url来拓展临时权限,这样接收方就能访问到资源了。显然,这是Google为了收紧Android的自由度,提升安全度所做的事情

在应用间共享文件
对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。

要解决这个问题最简单的方法就是使用FileProvider 步骤如下:

1.在AndroidManifest中增加

<provider
           android:name="androidx.core.content.FileProvider"
           android:authorities="你的app包名.fileprovider"
           android:exported="false"
           android:grantUriPermissions="true">
           <meta-data
               android:name="android.support.FILE_PROVIDER_PATHS"
               android:resource="@xml/filepaths"
               />
       </provider>

2.res下新建xml/filepaths.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external" path=“"/>
</paths>

3.将报错获取uri的地方改成以下格式

Uri uri = FileProvider.getUriForFile(activity, activity.getPackageName() + ".filepractivityovider", file);

问题解决。

参考文章https://blog.csdn.net/u010356768/article/details/89212742 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM