Android设置文件共享


要将应用程序中的文件安全地提供给另一个应用程序,您需要配置应用程序,以内容URI的形式为文件提供安全句柄。 Android FileProvider组件根据您在XML中提供的规范生成文件的内容URI。 本文将向您展示如何将FileProvider的默认实现添加到您的应用程序,以及如何指定要提供给其他应用程序的文件。

注意:FileProvider类是v4支持库( v4 Support Library)的一部分

指定FileProvider

为应用程序定义FileProvider需要在清单中输入一个条目。此条目指定用于生成内容URI的权限,以及指定您的应用程序可以共享的目录的XML文件的名称。

以下代码段显示如何向清单中添加指定FileProvider类,权限和XML文件名的元素:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
        ...>
        <provider
            android:name="android.support.v4.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属性指定要用于由FileProvider生成的内容URI的URI权限。在示例中,权限是com.example.myapp.fileprovider。对于你自己的应用程序,指定一个权限组成的应用程序的android:package值与附加字符串“fileprovider”。

<meta-data> , <provider>指向一个XML文件,指定您要共享的目录。 android:resource属性是文件的路径和名称,没有.xml扩展名。此文件的内容将在下一节中描述。

指定可分享目录

将FileProvider添加到应用程序清单后,您需要指定包含要共享的文件的目录。要指定目录,首先在项目的res / xml /子目录中创建文件filepaths.xml。在此文件中,通过为每个目录添加一个XML元素来指定目录。以下代码段显示了res / xml / filepaths.xml内容的示例。该代码段还演示了如何在内部存储区域中共享文件/目录的子目录:

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

在此示例中,<files-path>标记共享应用程序内部存储的files /目录中的目录。 path属性共享files /的images /子目录。 name属性指示FileProvider将路径段myimages添加到files / images /子目录中的文件的内容URI。

<path>元素可以有多个子节点,每个子节点指定一个不同的目录来共享。除了<files-path>元素,您还可以使用<external-path>元素共享外部存储器中的目录,使用<cache-path>元素共享内部缓存目录中的目录。

注意:XML文件是您可以指定要共享的目录的唯一方法;您不能以编程方式添加目录。

您现在有一个完整的FileProvider规范,为应用程序内部存储器的文件/目录中的文件或文件/子目录中的文件生成内容URI。当您的应用为文件生成内容URI时,它包含在<provider>元素(com.example.myapp.fileprovider)中指定的权限,路径myimages /和文件名称。

例如,如果根据本课程中的片段定义FileProvider,并且请求文件default_image.jpg的内容URI,FileProvider将返回以下URI:

content://com.example.myapp.fileprovider/myimages/default_image.jpg
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值