如何使 FileProvider 为可绘制对象提供服务?

How to make a FileProvider serve drawables?

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

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

但是(如果它没有一些致命的缺点)如何编写一个 FileProvider 来授予对应用程序 现有可绘制对象 的访问权限(无需首先复制这些可绘制对象另一个文件夹)?

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


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

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