Android 7.0 FileProvider使用
1). FileProvider
Android 7.0的新特性规定,对于android 7.0应用(仅仅对于android 7.0版本的sdk而言,若是编译版本低于25仍然不会受到影响),android框架使用StrictMode Api禁止我们的应用对外部(跨越应用分享)公开file://,若使用file://格式共享文件则会报FileUriExposedException异常,android 7.0应用间的文件共享需要使用content://类型的URI分享,并且需要为其提供临时的文件访问权限
(Intent.FLAG_GRANT_READ_URI_PERMISSION和Intent.FLAG_GRANT_WRITE_URI_PERMISSION),对此,官方给我们的建议是使用FileProvider类进行分享。
2). 使用步骤
- manifest中声明FileProvider
- res/xml中定义对外暴露的文件夹路径
- 生成content://类型的Uri
- 给Uri授予临时权限
- 使用Intent传递Uri
3). AndroidManifest.xml文件声明
<provider android:name="android.support.v4.content.FileProvider" android:authorities="<包名>.fileProvider" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"/> </provider>
- name:provider的类名,若使用默认的v4的FileProvider可使用”android.support.v4.content.FileProvider”,也可以设置为自定义的继承FileProvider的provider类;
- authorities:一个签名认证,可以自定义,但在获取uri的时候需要保持一致;
- grantUriPermissions:使用FileProvider的使用需要我们给流出的URI赋予临时访问权限(READ和WRITE),该设置是允许我们行使该项权力;
- meta-data:meta-data配置的是我们可以访问的文件的路径配置信息,需要使用xml文件进行配置,FileProvider会通过解析xml文件获取配置项,其中name名字不可改变为:android.support.FILE_PROVIDER_PATHS,resource为配置路径信息的配置项目。
4). xml配置
<?xml version="1.0" encoding="utf-8"?> <resources> <paths> <!-- Context.getFilesDir() + "/path/" --> <files-path name="my_files" path="mazaiting/"/> <!-- Context.getCacheDir() + "/path/" --> <cache-path name="my_cache" path="mazaiting/"/> <!-- Context.getExternalFilesDir(null) + "/path/" --> <external-files-path name="external-files-path" path="mazaiting/"/> <!-- Context.getExternalCacheDir() + "/path/" --> <external-cache-path name="name" path="mazaiting/" /> <!-- Environment.getExternalStorageDirectory() + "/path/" --> <external-path name="my_external_path" path="mazaiting/"/> <!-- Environment.getExternalStorageDirectory() + "/path/" --> <external-path name="files_root" path="Android/data/<包名>/"/> <!-- path设置为'.'时代表整个存储卡 Environment.getExternalStorageDirectory() + "/path/" --> <external-path name="external_storage_root" path="."/> </paths> </resources>
5). 生成Uri
Uri contentUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", new File(path));
6). 授予临时权限
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
7). 传递
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
8). 安装应用代码

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android 二次优化个人封装仿网易新闻可滑动标题栏
小菜前段时间根据超多 star 的 FlycoTabLayout 自己修改封装了仿网易顶部滑动标题栏 TabSlideLayout 滑动内容可以是文字也可以是网络图标,并整理了两篇小博客: Android 优化个人封装仿网易新闻可滑动标题栏 TabLayout (文字或图标) 仿网易新闻可滑动标题栏TabLayout(文字或图标) 因小菜自己封装的 TabSlideLayout 在滑动过程中没有回弹的动画效果,而 FlycoTabLayout 默认的滑动过程中也没有动画效果,而小菜技术太渣,所以只能照葫芦画瓢,按照 FlycoTabLayout 中的 CommonTabLayout 样式,二次优化一下自己的 TabSlideLayout。 小菜修改封装的 TabSlideLayout 是一个不限制栏目个数,超过屏幕范围可滑动切换的顶部 Tab 布局,item 的内容可以是文字也可以是图片,并且支持对文字和图片对绘色。 小菜测试步骤如下: 在 attrs 中添加如下属性,分别时是否回弹效果/是否回弹/回弹效果时长;并在 TabSlideLayout 中添加相应的 get/set 方法,从...
- 下一篇
界面无小事(五):自定义TextView
界面无小事(一): RecyclerView+CardView了解一下界面无小事(二): 让RecyclerView展示更多不同视图界面无小事(三):用RecyclerView + Toolbar做个文件选择器界面无小事(四):来写个滚动选择器吧!界面无小事(五):自定义TextView界面无小事(六):来做个好看得侧拉菜单!github传送门 目录 效果图 前言 自定义属性 MeasureSpec类 颜色解析 字号转换 最后 效果图 不多废话, 直接上图, 如果感兴趣再看下去. 效果图 前言 写第四篇滚动选择器的时候, 在自定义视图这里含糊了, 有些地方没说清楚, 这次补上关于自定义视图的部分. 自定义属性 自定义视图的一个要点就是添加自定义属性. 这里我们填上三个常用的, 文本, 颜色, 字号. 然后在布局文件中就可以使用了. 最后在自定义类中获取属性并赋值. <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyTextView"> <a...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案