FileProvider documentation将这些位置列为可以提供文件的地方:
应用内部存储区域的文件/子目录
应用内部存储区域的缓存子目录
外部存储区域的根
应用外部存储区域的根
应用外部缓存区域的根
还有FileProvider后代,例如Commonsware's CWAC Provider,它们也允许从以下位置提供文件:
应用的原始资源文件夹
应用的资源文件夹
getDir()
Environment.getExternalStoragePublicDirectory()
但是(如果它没有一些致命的缺点)如何编写一个FileProvider来授予对应用程序的现有drawables 的访问权限(没有先在另一个文件夹中制作那些drawable的副本)?
答案 0 :(得分:1)
没有缺点,但这可能毫无意义(见下面的解释)。
实现CWAC Provider的此类访问分支源代码,并将raw
resources文件夹替换为drawables
文件夹。常用的可绘制格式(png和jpg)由aapt未压缩存储,因此在该方面原始资源和drawable之间没有区别。请注意,由于drawable通常是为多个配置存储区准备的,因此您需要调用者指定所需的维度/分辨率(例如,通过Uri中的其他自定义查询参数)。
也就是说,根据您的目标,使用ContentProvider访问应用程序资源可能是不必要的。如果您的应用程序不受DRM保护,则它是apk,资源将以未加密的方式存储在设备上。 任何已安装的应用程序都可以轻松访问这些资源而无需通过ContentProvider:这样做只需调用createPackageContext并使用返回的Context的Resources
对象,就好像这些是普通的本地资源一样。你自己的。