当前位置: 首页 > 知识库问答 >
问题:

为什么对外部文件使用FileProvider?

蔚弘量
2023-03-14

我理解为什么文件提供商可以在控制权限的同时,将一个应用程序的私有文件(应用程序内部存储中的文件)共享给另一个应用程序。

文档解释了它如何也可以用来共享外部存储(SD卡等)中的文件:

<代码>

而不是

<代码>

(https://developer.android.com/reference/android/support/v4/content/FileProvider.html)

这有什么意义?为什么需要为此使用FileProvider?其他应用已经可以访问外部存储,因此任何其他应用都需要一个文件路径,而不是URI。我错过了什么?

共有2个答案

昝浩阔
2023-03-14

Android 4.4中的一项更改与存储权限更改有关:

在Android 4.4上运行时,你的应用程序无法读取外部存储上的共享文件,除非你的应用程序具有read_external_storage权限。也就是说,未经许可,无法再访问由getExternalStoragePublicDirectory()返回的目录中的文件。

但是,如果你通过文件提供商提供文件,你的应用程序可以拥有权限,而另一个应用程序不需要知道文件的位置。

利博远
2023-03-14

其他应用程序已经可以访问外部存储

不一定。如果他们没有读取外部存储写入外部存储权限,他们就无法访问外部存储。

此外,如果在某个时候,对外部存储的更大限制开始发挥作用(例如,通过Android工作计划的“工作”和“家庭”部分),其中一个应用对外部存储的看法不同于另一个应用对外部存储,即使在逻辑上是同一个用户。然后,即使“工作”应用程序具有正确的权限,它也可能无法看到“家庭”应用程序放在外部存储中的文件,除非“家庭”应用程序通过内容提供商(如文件提供商)为他们提供服务。

 类似资料:
  • 此angularJS文件不将表达式的值显示为“全名:John Doe”;相反,它显示“全名:{{firstName”“lastName}”。我可能错过了什么? AngularJS文件结束 下面是它的外部javaScript文件:personController。js

  • 编写 jQuery 插件与向 jQuery.prototype(通常显示为 $.fn)添加方法一样简单,且需要遵循一些简单的规则,比如返回 this。所以为什么会存在部件库(Widget Factory)? 在本章节中,我们将讲解部件库(Widget Factory)的好处,并了解何时使用它,以及为什么要使用它。 无状态 vs. 有状态插件 大多数 jQuery 插件是无状态的,它们执行一些动作即

  • 我希望在运行时传递变量,一旦war文件部署在tomcat上。如何使用classplath中的application.properties以及另一个属性文件ex。abcd.properties位于specific directory.am基本上希望设置额外的类路径,并从该路径中的属性文件中读取值,以及war部署的默认类路径位置。 我使用Spring boot。其中一种方法是将所有属性传递到数据库端,

  • json文件引入为什么报错? 画了个地图,地图json本来是在我本地的,但是由于数据太多,就放在我们公司服务器上面了 看报错信息 点击这个链接是能出现json数据的 看代码 使用axios 时候回报跨域错误, 我的背景图片就在这个服务器上面,是正常访问的 各位大佬,求助,如何访问这个远程json

  • 我正在完成一个项目,我必须将它部署为一个jar文件,在eclipse中它工作得很好,我的项目依赖于两个库,这两个库也都依赖于dll文件。我已经将这些DLL的路径添加到每个外部JAR的本机库位置。然后,我使用eclipse可运行的jar文件导出向导将project导出为一个jar文件我在指定的位置得到了jar文件,它运行了,但是当我单击一个调用我得到的库之一的按钮时,我得到了java.lang.Un

  • 我是Rust的新手。我认为用于将标识符导入当前范围,用于声明外部模块。但是这种理解(可能是错误的)对我来说没有任何意义。有人能解释一下为什么Rust有这两个概念以及适合使用它们的情况吗?