FileProvider,就是 ContentProvider 的一个特殊子类,帮助我们将访问受限的 file:// URI 转化为可以授权共享的 content:// URI。
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="/apk/res/android">
<files-path name="my_images" path="images/"/>
...
</paths>
元素必须包含一到多个子元素。这些子元素用于指定共享文件的目录路径,必须是这些元素之一:
:内部存储空间应用私有目录下的 files/ 目录,等同于 () 所获取的目录路径;
:内部存储空间应用私有目录下的 cache/ 目录,等同于 () 所获取的目录路径;
:外部存储空间根目录,等同于 () 所获取的目录路径;
:外部存储空间应用私有目录下的 files/ 目录,等同于 (null) 所获取的目录路径;
:外部存储空间应用私有目录下的 cache/ 目录,等同于 ();
可以看出,这五种子元素基本涵盖内外存储空间所有目录路径,包含应用私有目录。同时,每个子元素都拥有 name 和 path 两个属性。
其中,path 属性用于指定当前子元素所代表目录下需要共享的子目录名称。注意:path 属性值不能使用具体的独立文件名,只能是目录名。
name 属性用于给 path 属性所指定的子目录名称取一个别名。后续生成 content:// URI 时,会使用这个别名代替真实目录名。这样做的目的,很显然是为了提高安全性。
如果我们需要分享的文件位于同级别目录下不同的子目录中,就需要添加多个子元素逐一指定要分享的文件目录,或者共享他们通用的父目录也行。