设置文件分享

为了安全地将应用中的文件提供给其他应用,您需要将应用配置为 文件的安全句柄,格式为内容 URI。Android FileProvider组件为 文件。本课将向您介绍如何向 FileProvider 的实现,以及如何 指定要提供给其他应用的文件。

注意FileProvider 类是 AndroidX Core 库。相关信息 如何在应用中添加此库,请参见 声明依赖项

指定 FileProvider

若要为应用定义 FileProvider,您需要在 。此条目指定了生成内容 URI 以及生成内容 URI 时要使用的授权, 一个 XML 文件的名称,该文件指定了应用程序可以共享的目录。

以下代码段展示了如何将 <provider> 元素,用于指定 FileProvider 类、相应授权方以及 XML 文件名:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
        ...>
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.example.myapp.fileprovider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>
        ...
    </application>
</manifest>

在此示例中,android:authorities 属性指定 URI 授权 您要用于由 FileProvider。 示例中的授权为 com.example.myapp.fileprovider。个人专属 应用,请指定由应用的 带有字符串“fileprovider”的 android:package 值。了解详情 授权值,请查看主题 内容 URI 及相关文档 android:authorities 属性。

<meta-data> 子元素 <provider> 指向一个 XML 文件,该文件指定您要 份额。android:resource 属性是该文件的路径和名称,不包含 .xml 扩展名。此文件的内容将在下一部分进行介绍。

指定可共享的目录

FileProvider 添加到应用清单后, 您需要指定包含要共享的文件的目录。要指定 目录中,首先在 res/xml/ 中创建 filepaths.xml 文件 子目录中在此文件中,通过为 每个目录。以下代码段展示了 res/xml/filepaths.xml。该代码段还演示了如何共享子目录 (位于内部存储区域中 files/ 目录下):

<paths>
    <files-path path="images/" name="myimages" />
</paths>

在此示例中,<files-path> 标记共享了 files/ 目录中。path 属性 共享 files/images/ 子目录。name 属性会告知 FileProvider 添加路径段 将 myimages 设置为 files/images/ 子目录中文件的内容 URI。

<paths> 元素可以有多个子元素,每个子元素指定一个不同的 要共享的目录除了 <files-path> 元素之外,您还可以 使用 <external-path> 元素共享外部存储空间中的目录; <cache-path> 元素,用于共享内部缓存中的目录 目录。如需详细了解指定共享目录的子元素,请参阅 FileProvider 参考文档。

注意:您只能通过 XML 文件指定要 份额;您不能以编程方式添加目录

现在,您已获得 FileProvider 的完整规范。 该函数为应用的 files/ 目录中的文件生成内容 URI, 或用于 files/ 的子目录中的文件。当您的应用 文件的内容 URI,其中包含使用 <provider> 个元素 (com.example.myapp.fileprovider), 路径 myimages/ 和文件名。

例如,如果您根据FileProvider 代码段,您需要请求该文件的 default_image.jpgFileProvider 会返回 以下 URI:

content://com.example.myapp.fileprovider/myimages/default_image.jpg

如需了解其他相关信息,请参阅: