如何使FileProvider提供drawables?

时间:2017-07-17 04:22:22

标签: android android-contentprovider android-fileprovider

FileProvider documentation将这些位置列为可以提供文件的地方:

  • 应用内部存储区域的文件/子目录

  • 应用内部存储区域的缓存子目录

  • 外部存储区域的根

  • 应用外部存储区域的根

  • 应用外部缓存区域的根

还有FileProvider后代,例如Commonsware's CWAC Provider,它们也允许从以下位置提供文件:

  • 应用的原始资源文件夹

  • 应用的资源文件夹

  • getDir()

  • 返回的文件夹
  • Environment.getExternalStoragePublicDirectory()

  • 返回的文件夹

但是(如果它没有一些致命的缺点)如何编写一个FileProvider来授予对应用程序的现有drawables 的访问权限(没有先在另一个文件夹中制作那些drawable的副本)?

1 个答案:

答案 0 :(得分:1)

没有缺点,但这可能毫无意义(见下面的解释)。

实现CWAC Provider的此类访问分支源代码,并将raw resources文件夹替换为drawables文件夹。常用的可绘制格式(png和jpg)由aapt未压缩存储,因此在该方面原始资源和drawable之间没有区别。请注意,由于drawable通常是为多个配置存储区准备的,因此您需要调用者指定所需的维度/分辨率(例如,通过Uri中的其他自定义查询参数)。

也就是说,根据您的目标,使用ContentProvider访问应用程序资源可能是不必要的。如果您的应用程序不受DRM保护,则它是apk,资源将以未加密的方式存储在设备上。 任何已安装的应用程序都可以轻松访问这些资源而无需通过ContentProvider:这样做只需调用createPackageContext并使用返回的Context的Resources对象,就好像这些是普通的本地资源一样。你自己的。