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