android - 从 ContentProvider 提供图像和其他文件

标签 android image android-contentprovider

我四处搜索并发现了有关从 ContentProvider 存储和检索文件的问题,但我的情况有点不同。

我正在构建一个应用程序来托管我们的其他应用程序之一的内容。将其视为一种无需实际进行应用内购买即可销售内容的方式。

它目前正在工作,但我必须将图像复制到缓存中,以便从 openFile 传回的 ParcelFileDescriptor 有效。我希望有人可能知道如何从应用程序 bundle 的文件中引用和任意 ParcelFileDescriptor。 Assets 似乎无法促进这一点。 Raw 可能是相同的场景。

让我试着用例子来解释...... 如果我将所有文件存储在 Assets 中(我目前是这样),这就是我希望事情如何工作。

@Override
public ParcelFileDescriptor openFile(Uri uri, String mode)
throws FileNotFoundException {
    String fileName = uri.getEncodedPath();
    AssetFileDescriptor afd = getContext().getAssets().openFd(fileName);
    ParcelFileDescriptor pfd = afd.getParcelFileDescriptor();
    return pfd;
}

但是,当然,这是行不通的。我得到一个有效的 ParcelFileDescriptor 返回到调用 ContentResolver 的应用程序,但它似乎指向整个 Assets 目录。 在阅读了一段时间的 intertubes 之后,似乎 Assets 不允许描述符从与其关联的应用程序外部引用它(尽管我没有对此的引用)。

我通过将有问题的文件复制到托管 ContentProvider 的应用程序缓存中然后返回缓存文件的 ParcelFileDescriptor 来“解决”问题。 这工作得很好......但我最终将应用程序的大小增加了一倍。

这是我问题的核心...有没有一种方法可以 bundle 静态文件(任何类型)以从 ContentProvider 提供服务,而无需将其复制到缓存中。

即使我要使用 sqlite 并将文件存储为 blob,我也必须制作数据库的初始副本,以便它是可写的...所以结果是一样的。

这有意义吗? :-)

最佳答案

关于android - 从 ContentProvider 提供图像和其他文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4832498/

相关文章:

android - CursorLoader - 两个表连接查询?

android - 具有自定义 Uri 的下载管理器

python - 我想让python输出一个png文件

javascript - 无法从多个 html 输入字段中添加或删除图像

android - 我的 Android 应用程序需要 Play 商店中的 "Other"权限 - 这意味着什么以及如何修复?

java - 如何将 Activity 转换为图像

c++ - 如何使用 Imebra 库将压缩像素(用我自己的编码器压缩)保存回 DICOM 图像文件?

android - 我可以在 Android 的 Settings.NameValueTable 内容提供者中添加/检索/删除条目吗?

java - 如果请求超时,HttpClient 会多次执行请求

java - PerformClick()方法返回错误