Android 如何让文件提供者提供可提取的内容?

Android 如何让文件提供者提供可提取的内容?,android,android-contentprovider,android-fileprovider,Android,Android Contentprovider,Android Fileprovider,将这些位置列为可以从中提供文件的位置: 应用程序内部存储区域的文件/子目录 应用程序内部存储区域的缓存子目录 外部存储区域的根 应用程序外部存储区域的根目录 应用程序外部缓存区域的根 有文件提供程序子体,例如,也允许从以下位置提供文件: 应用程序的原始资源文件夹 应用程序的资产文件夹 getDir()返回的文件夹 由Environment.getExternalStoragePublicDirectory()返回的文件夹 但是(如果它没有一些致命的缺点的话)如何编写一个文件提供者来授予对

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

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

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

  • 外部存储区域的根

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

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

有文件提供程序子体,例如,也允许从以下位置提供文件:

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

  • 应用程序的资产文件夹

  • getDir()返回的文件夹

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


但是(如果它没有一些致命的缺点的话)如何编写一个文件提供者来授予对应用程序现有可绘制内容的访问权(而不首先在另一个文件夹中复制这些可绘制内容)

没有负面影响,但这可能毫无意义(见下面的解释)


实现CWAC提供程序的此类访问叉源代码,并将其对
raw
resources文件夹的使用替换为
drawables
文件夹。常用的可绘制格式(png和jpg)是以aapt未压缩的方式存储的,因此在这方面,原始资源和可绘制格式没有区别。注意,由于Drawable通常是为多个配置bucket准备的,所以需要调用方指定它们需要的维度/解析(例如通过Uri中的其他自定义查询参数)

也就是说,根据您的目标,使用ContentProvider访问应用程序资源可能是不必要的。若你们的应用程序并没有受DRM保护,那个么它就是apk,资源将不加密地存储在设备上。任何已安装的应用程序都可以轻松访问这些资源,而无需通过ContentProvider:要做到这一点,只需调用并使用返回上下文的
resources
对象,就像这些是您自己的普通本地资源一样