3

我理解为什么 FileProvider 对于与另一个应用程序共享一个应用程序的私有文件(应用程序内部存储中的文件)很有用,同时控制权限。

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

<external-path name="name" path="path" />

代替

<files-path name="name" path="path" />

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

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

4

2 回答 2

4

另一个应用程序已经可以访问外部存储

不必要。如果他们不持有READ_EXTERNAL_STORAGE或没有WRITE_EXTERNAL_STORAGE权限,则他们无权访问外部存储。

此外,如果在某个时间点对外部存储有更大的限制(例如,Android Work 倡议中的“工作”和“家庭”部分),我也不会感到惊讶,其中一个应用程序对外部存储的看法是不同的比另一个应用程序的外部存储视图,即使在逻辑上是同一个用户。然后,即使“工作”应用程序具有正确的权限,它也可能无法看到“家庭”应用程序放在外部存储上的文件,除非“家庭”应用程序通过ContentProviderlike为他们提供服务FileProvider

于 2014-10-13T18:55:28.213 回答
2

Android 4.4 中所做的更改之一与存储权限更改有关:

您的应用在 Android 4.4 上运行时无法读取外部存储上的共享文件,除非您的应用具有READ_EXTERNAL_STORAGE权限。即返回的目录中的文件在getExternalStoragePublicDirectory()没有权限的情况下不能再访问。

但是,如果您通过 FileProvider 提供文件,则您的应用程序可以获得权限,而其他应用程序不需要知道文件的位置。

于 2014-10-13T18:56:04.250 回答