FileProvider的使用

Android  小知识  2024年6月21日 pm6:46发布4个月前更新 91es.com站长
91 0 0

前言

Android 7.0开始,Android 框架开启了严格模式(StrictMode),禁止应用将file:///开头的Uri共享给其他的应用读写文件,否则会收到FileUriExposedException的异常。因此,Android提供了新的文件共享机制FileProvider

记录一下FileProvider的使用,方便自己查阅和学习。

正文

下面简单记录一下FileProvider的使用。

第一步

AndroidManifest.xml中添加provider配置

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.fileProvider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

在Manifest文件中添加<provider>标签,

  1. 设置android:name属性的值为androidx.core.content.FileProvider;

  2. 设置android:authorities属性的值,可以自定义,通常是应用的包名加上.fileProvider后缀;

  3. 设置android:exported属性的值为false,表示拒绝外部直接访问;

  4. 设置android:grantUriPermissions的属性为true,表示可以为文件赋予临时访问权限。

第二步

在需要模块中创建file_paths.xml,我这以BiuFile2为例,具体路径如下:

/BiuFile2/src/main/res/xml/file_paths.xml

然后在file_paths.xml,在这个文件中创建<paths>根结点,并在该节点下配置共享的文件夹,示例配置如下:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="external-path"
        path="." />
    <external-cache-path
        name="external-cache-path"
        path="." />
    <external-files-path
        name="external-files-path"
        path="." />
    <files-path
        name="files_path"
        path="." />
    <cache-path
        name="cache-path"
        path="." />
    <root-path
        name="root"
        path="." />
</paths>

具体意思最好参考一官方文档,这里步介绍哈

第三步

这一步也就是如何分享文件。

创建分享的文件uri

Uri contentUri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvider", new File(path));

fileProvider跟AndroidManifest.xml配置的要一样咯!

我这传入的path为

/storage/udisk2/AAAA.flac

上面创建的contentUri为

content://com.biumall.file2.fileProvider/root/storage/udisk2/AAAA.flac

参考文章

  1. 安卓FileProvider是如何通过Uri提升文件安全的?

 历史上的今天

  1. 2022: ThreadPoolExecutor简单记录(0条评论)
  2. 2021: 余秀华 : 栀子花开(0条评论)
  3. 2020: WordPress禁用XMLRPC(0条评论)
  4. 2020: [摘]Android异常和性能优化 - OOM异常(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

林清玄:路上的情书

我捡过一封诀别的情书。情书上有这样看来普通的句子:“当初是我选择了你,心里明知与你不会长久,还是执着的选择了你。”“这些日子以来,谢谢你陪我走过这一段路。”“你是一个很好的人,你一定会认识比我好上千倍的女孩。”“由衷地希望在没有我的日子,你依然过得好。”会捡到这封情书是很偶然的。有一天我在...

毕淑敏: 流露你的真表情

学医的时候,老师出过一道题目:人和动物,在解剖上的最大区别是什么?学生们争先恐后发言,都想由自己说出那个正确的答案。这看起来并不是个很难的问题。有人说,是直立行走。先生说,不对。大猩猩也是可以直立行走的。有人说,是懂得用火。先生不悦道,我问的是生理上的区别,并不是进化工的异同。更有同学答,是...

莫泊桑:瞎子

看见初升的太阳便觉得衷心喜悦,这种喜悦到底是怎么回事?为什么降到大地来的这片光明会如此这般使我们感到生活的幸福?天空蔚蓝,田野碧绿,房舍雪白;我们喜洋洋的眼睛畅饮着这些鲜艳的色彩,把它们化成我们心灵中的快乐。于是我们一心只想跳舞,奔跑、歌唱,在思想上感到轻松愉快,在心田中产生了一种普及到万物的爱,简...

Android日志分析笔记

下面整理一下日志分析常用的关键字,包括系统重启(Fatal 、died),异常,应用ANR,闪退等(慢慢整理,不一定全部都有)1、 Fatal 关键字这是可以直接查找系统异常的关键字AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCES...

《MySQL基础教程》笔记4

前言本文主要是select语句的使用学习一下MySQL,一直没有系统的学习一下。最近有空,看了《MySQL基础教程-西泽梦路》,简单的做一下笔记。记录于此,方便自己回忆。MySQL中对大小写没有区分,我这里习惯性用小些。正文我这以Window版的phpstudy软件验证。需要进入...

[摘]Android GC日志简单分析

前言测试反馈的日志中有大量的dalvikvm,如下:D/dalvikvm( 723): GC_CONCURRENT freed 658K, 38% free 1168K/1876K, paused 1ms+1ms, total 11msD/dalvikvm( 526): GC_FOR_A...