【Android Developers Training】 36. 设置文件共享
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。
原文链接:http://developer.android.com/training/secure-file-sharing/setup-sharing.html
为了从你的应用安全地将一个文件发送给另一个应用,你需要配置你的应用来提供安全的文件句柄(URI的形式),Android的FileProvider组件会基于你在XML文件中的具体配置,为文件创建URI。这节课会向你展示如何在你的应用添加FileProvider的默认实现,以及如何指定你要共享的文件。
Note:
FileProvider类是v4 Support Library中的。关于如何在你的应用中包含此库,可以阅读:Support Library Setup。
一). 指定FileProvider
为你的应用定义一个FileProvider,需要在你的清单文件中的一个字段。这个字段指明了使用创建的URI权限,以及一个XML文件,它指定了你的应用可以共享的目录路径。
下面的例子展示的是,如何在清单文件中添加<provider>标签,来指定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权威(URI authority)。在这个例子中,这个权威是“com.example.myapp.fileprovider”。对于你自己的应用,定义权威时,是在你的应用包名(android:package的值)之后追加“fileprovider”。为了学习更多关于权威的知识,可以阅读:Content URIs,以及android:authorities。
<provider>下的子标签<meta-data>指定了一个XML文件,它指定了你希望共享的目录路径。“android:resource”属性字段是这个文件的路径和名字(无“.xml”后缀)。该文件的内容将在下一节讨论。
二). 指定可共享目录路径
一旦你在你的清单文件中为你的应用添加了FileProvider,你需要指定你希望共享文件的目录路径。为了指定这个路径,我们首先在“res/xml/”下创建文件“filepaths.xml”。在这个文件中,通过为每一个目录添加一个XML标签。下面的例子展示的是一个“res/xml/filepaths.xml”的例子。这个例子也说明了如何在你的内部存储区域共享一个“files/”目录的子目录:
<paths>
<files-path path="images/" name="myimages" />
</paths>
在这个例子中,<files-path>标签共享的是在你的应用的内部存储中“files/”目录下的目录。“path”属性字段共享了“files/”目录下的子目录“images/”。“name”属性字段告知FileProvider向在“files/images/”子目录中的文件URI添加一个路径分段标记“myimages”。
<paths>标签可以有多个子标签,每一个子标签都指定一个不同的要共享的目录。除了<files-path>标签,你可以使用<external-path>来分享位于外部存储的文件,而<cache-path>标签用来共享在你的内部缓存目录下的目录。学习更多关于指定共享目录的子标签的知识,可以阅读:FileProvider。
Note:
XML文件是你定义共享目录的唯一方式,你不可以以代码的形式添加目录。
现在你有一个完整的FileProvider说明,它为在你应用的内部存储中“files/”目录下创建文件的URI,或者是在“files/”中的子目录内的文件创建URI。当你的应用为一个文件创建了URI,它就包含了在<provider>标签中指定的权力(“com.example.myapp.fileprovider”),路径“myimages/”,和文件的名字。
例如,如果你根据这节课的例子定义了一个FileProvider,然后你需要一个文件“default_image.jpg”的URI,FileProvider会返回如下URI:
content://com.example.myapp.fileprovider/myimages/default_image.jpg
【Android Developers Training】 36. 设置文件共享的更多相关文章
- 【Android Developers Training】 38. 文件共享需求
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 35. 序言:分享文件
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 75. 使用NSD
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 54. 打印自定义文档
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 9. 覆盖于布局之上的Action Bar
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 8. 定义Action Bar风格
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 7. 添加Action Buttons
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 6. 配置Action Bar
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 4. 启动另一个Activity
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
随机推荐
- 从.Net版本演变看String和StringBuild性能之争
在C#中string关键字的映射实际上指向.NET基类System.String.System.String是一个功能非常强大且用途非常广泛的基类,所以我们在用C#string的时候实际就是在用.NE ...
- B507实验室打印机连接方法
一.准备工具 实验室打印机内网IP地址:172.16.135.41 ,这个地址要看具体的打印机地址(可能会更换). 从实验室QQ群(土匪窝)上下载打印机驱动,如下图所示. 3. 非常重要的事情:请链接 ...
- 6. Java 加解密技术系列之 3DES
Java 加解密技术系列之 3DES 序 背景 概念 原理 代码实现 结束语 序 上一篇文章讲的是对称加密算法 — — DES,这篇文章打算在 DES 的基础上,继续多讲一点,也就是 3 重 DES ...
- javaWeb学习总结(8)- JSP基础语法(2)
任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...
- Dubbo工程结构和Maven打包
Dubbo 工程结构 待续 Dubbo pom版本设置 在升级Dubbo的pom版本时需要对每一个工程中子工程pom,子子工程pom进行修改,这是一个复杂繁琐的工作.为此有人手动一个个修改,好一点的用 ...
- Mac下修改环境变量并保存
1. 终端执行 touch ~/.bash_profile 2.终端执行 vim ~/.bash_profile 3.点一下向下箭头,点E 进入bash_profile文件 4.点i进入编辑模式,进行 ...
- 初码-Azure系列-记一次MySQL数据库向Azure的迁移
初码Azure系列文章目录 还在继续给客户迁移不同的系统到Azure,这一次是一个系统的MySQL数据库要迁移,将迁移过程记录一下 原系统环境 数据库版本:MySQL Community Editio ...
- Javascript创建类和对象
现总结一下Javascript创建类和对象的几种方法: 1.原始的创建方法: <script type="text/javascript"> var person = ...
- opencv基础到进阶(2)
本文为系列文章的第2篇,主要讲解对图像的像素的操作方法. 2.1存取像素值 为了存取矩阵元素,需要指定元素所在的行和列,程序会返回相应的元素.单通道图像返回单个数值,多通道图像,返回的则是一组向量(V ...
- ORACLE中死锁的知识点总结
死锁的概念 什么是死锁呢? 其实我们生活中也有很多类似死锁的例子. 我先举一个生活中的例子:过年回家,父亲买了一把水弹枪,儿子和侄子争抢着要先玩,谁也不让谁,拆开包装后,一个抢了枪, 一个逮住了子 ...