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


应用程序内部存储区的文件/子目录
应用程序内部存储区域的缓存子目录
外部存储区的根
应用程序外部存储区的根
应用程序外部缓存区域的根


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


应用程序的原始资源文件夹
应用程序的资产文件夹
getDir()返回的文件夹
Environment.getExternalStoragePublicDirectory()返回的文件夹


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

最佳答案

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



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

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

关于android - 如何使FileProvider提供可绘制内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45135942/

10-11 20:13