Android 7.0 FileUriExposedException 解决

本文介绍了在Android应用中遇到的FileUriExposedException问题及解决方案。通过禁用StrictMode的VmPolicy检测,可以避免HTTPS升级后的bug,允许使用file://格式的URI进行图片分享。

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

接着去年的老项目, 因为交接给别的部门了...刚好那边部门的安卓离职了...升级了HTTPS后出现了bug

android.os.FileUriExposedException:  

百度后发现.解决办法.同时亲自测试.解决

 VmPolicy方式

以上方法固然是推荐使用的,正确的方法。但是我在实际开发中遇到这样的问题。某些应用(此处点名新浪微博)根本无法理解一个指向文件的content://格式的URI。新浪微博接收到这类URI之后,无法加载图片,并会在点击发送微博时崩溃。 
另一方面,新浪微博对权限管理的处理采取了一种比较流氓的方式。它会在启动时申请文件读写权限,而如果拒绝该权限的话,居然就直接退出了。我反正是不信什么需要文件权限来放缓存放数据的说辞。放缓存放数据有着一堆不需要权限的目录可用。但是这样一来,我们其实是不需要担心传递一个file://格式URI过去而对方没有权限的。 
话说回来,如何解决这一问题呢?我在调研的时候观察到严格模式的一个方法:StrictMode.VmPolicy.Builder.detectFileUriExposure()。顾名思义,调用这个方法就会检测FileUriExposure这件事。这个方法其实从API18就有了,是不是有可能在API24变成了默认选项呢? 
在Application.onCreate加入如下代码,置入一个不设防的VmPolicy:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {  
    StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();  
    StrictMode.setVmPolicy(builder.build());  
}  

再用旧的方式直接把file://格式的URI发送出去。居然成功了,没有再抛出FileUriExposedException。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值