栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android 7.0行为变更 FileUriExposedException解决方法

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 7.0行为变更 FileUriExposedException解决方法

Android 7.0行为变更 FileUriExposedException解决方法

当我们开发关于【在应用间共享文件】相关功能的时候,在Android 7.0上经常会报出此运行时异常,那么Android 7.0以下没问题的代码,为什么跑到Android 7.0+的设备上运行就出问题了呢?,这主要来自于Android 7.0的一项【行为变更】!

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

要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider 类。

FileProvider 类的用法:

第一步:为您的应用定义一个FileProvider清单条目,这个条目可以声明一个xml文件,这个xml文件用来指定应用程序可以共享的目录。


  
    
      
    
    ...
  

在这段代码中, android:authorities 属性应该是唯一的,推荐使用【应用包名+fileprovider】,推荐这样写

android:authorities=”${applicationId}.file_provider”,可以自动找到应用包名。

meta-data标签指定了一个路径,这个路径使用resource指定的xml文件来指明是那个路径:

xml文件如下:



  

Uri的获取方式也要根据当前Android系统版本区分对待:

  File dir = getExternalFilesDir("user_icon");
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
      icon_path = FileProvider.getUriForFile(getApplicationContext(),
   "com.mqt.android_headicon_cut.file_provider", new File(dir, TEMP_FILE_NAME));
    } else {
      icon_path = Uri.fromFile(new File(dir, TEMP_FILE_NAME));
    }

这样问题就解决了。贴上一个安装apk适配7.0的例子:https://www.jb51.net/article/113307.htm

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/158737.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号