当前标签 / FileProvider / 总共1篇

FileProvider

前言

在Android中经常会遇到存储和访问文件,一般情况下我们会使用Context#openFileOutput()或者Context#getCacheDir()来获得文件存储路径,但是这两种方式存储的文件只能在APP内部访问,不能共享给其他APP访问。这个时候我们就需要将文件存储在外部存储卡上面,使用Environment#getExternalStorageDirectory()或者Environment#getDownloadCacheDirectory(),但是这样带来了两个潜在的问题。

  1. 所有应用都可以访问该数据,造成安全问题,我们只希望部分应用可访问。
  2. 为了读写该文件APP需要有READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE权限,需要访问的其他APP也需要READ_EXTERNAL_STORAGE权限才能读取。对于内容的提供者我们不能确保访问的应用程序就一定有READ_EXTERNAL_STORAGE权限 。

因此使用file://... URI来共享文件并不好,替代方案就是定义一个ContentProvider,使用content://... URI来共享文,而FileProvider是对ContentProvider的进一步封装,专门用于文件共享。

FileProvider是什么

FileProvider是ContentProvider的一个特殊子类,它通过创建一个 content:// Uri 来使应用程序相关的文件实现安全共享:file:/// Uri.

之前我们在使用URL来访问内容的时候可以使用 Intent.setFlags() 来设置一些临时访问权限,这些Google认为是不安全的,所以从Android7.0开始执行了“StrictMode API 政策禁”,来使用FileProvider来解决这个访问权限问题。

阅读更多