如何使FileProvider服务可绘制?

问题描述:

FileProvider documentation列出了这些地点的地方它可以从文件服务解决方案:应用程序的内部存储区域的如何使FileProvider服务可绘制?

  • 文件/子目录

  • 一个应用程序的内部存储区域的缓存子目录

  • 外部存储区域的根目录

  • 应用程序的外部存储区域的根目录

  • 应用程序的外部缓存区的根

有FileProvider后代,如Commonsware's CWAC Provider,这也让文件从服务:

  • 应用程序的原始资源文件夹

  • 应用的资产文件夹

  • ()

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

但(如果它不具有一些致命的缺点)如何将一个写FileProvider该赠款GETDIR返回的文件夹访问应用的现有的可绘制文件(没有先制作其他文件夹中的可绘制副本)?

没有缺点,但是这可能是没有意义的(见下文解释)。


要实现CWAC提供这样的访问叉源代码,并取代它的使用raw资源文件夹与文件夹drawables。通常使用的可绘制格式(png和jpg)由aapt进行非压缩存储,因此在这方面原始资源和drawable之间没有区别。请注意,由于drawable通常是为多个配置桶准备的,因此您需要调用者指定它们需要的维度/分辨率(例如通过Uri中的其他自定义查询参数)。

这就是说,这取决于你的目标,使用的ContentProvider访问应用程序的资源可能是不必要的。如果您的应用程序不受DRM保护,则它是apk,资源将在设备上未加密存储。 任何安装的应用程序可以很容易地访问这些资源,而无需通过ContentProvider的打算:这样做只是调用createPackageContext并使用返回的上下文的Resources对象,如果这些是你自己的普通的本地资源。