我理解为什么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。我错过了什么?
答案 0 :(得分:3)
其他应用已经可以访问外部存储
不一定。如果他们不拥有READ_EXTERNAL_STORAGE
或WRITE_EXTERNAL_STORAGE
权限,则他们无权访问外部存储空间。
此外,如果在某个时间点,对外部存储的更多限制发挥作用(例如,通过Android工作计划的“工作”和“主页”部分),一个应用程序的外部视图,我不会感到惊讶存储与另一个应用程序的外部存储视图不同,即使逻辑上是同一个用户。然后,即使“工作”应用具有正确的权限,它也可能无法通过“家庭”应用看到外部存储上的文件,除非“家庭”应用通过ContentProvider
提供服务FileProvider
。
答案 1 :(得分:2)
Android 4.4中所做的更改之一与storage permission changes:
有关在Android 4.4上运行时,您的应用无法读取外部存储设备上的共享文件,除非您的应用具有
READ_EXTERNAL_STORAGE
权限。也就是说,未经许可,将无法再访问getExternalStoragePublicDirectory()
返回的目录中的文件。
但是,如果您通过FileProvider提供文件,则您的应用可以拥有权限,而其他应用不需要知道文件的位置。