• 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 

  • 相关阅读:
    卡尔曼滤波的原理与思想
    什么是端口
    什么是ICD文件
    USB口,串口,以太网口简介
    Linux基本操作笔记
    网络营销学习路线图
    读书推荐:2017 第一期
    又见Bug
    如何请教别人问题?
    圆桌问答 (2017 第一季)
  • 原文地址:https://www.cnblogs.com/999625696397qq/p/13687780.html
Copyright © 2020-2023  润新知