1

在我的应用程序中,我需要将动态解密的文件传递给第三方应用程序,而不将其保存到设备中。

示例:我有一个自己创建的加密文件,其中包含一个 pdf 文件和一些要求,然后才能显示 pdf 文件。如果所有要求都满足,则该 pdf 文件应由第三方 PDF 阅读器显示。

所以我需要开始一个新的意图,但是有问题。我必须提供我的 pdf 文件的 URI,但我没有 URI,因为我没有将文件保存到设备中。

有什么办法可以完成这项工作吗?

4

2 回答 2

3

对于非常小的 PDF 或使用某种流加密算法加密的 PDF,您可以创建一个管道ContentProvider. 使用管道,您基本上将数据倒入一个OutputStream中,而另一方使用 a UriandContentResolver来检索相应的InputStream.

但是,堆空间的限制将严重限制文件的大小,如果您不能以流方式处理它(例如,当您从 HTTP 读取字节时,动态解密并将解密的字节传递给OutputStream.

这是创建这样一个ContentProvder.

于 2013-04-23T12:19:23.917 回答
2

回答我自己的问题:

连同来自 CommensWare 的答案(和示例代码)和这个链接,我找到了一个半解决方案。

示例代码向您展示了如何使用内容提供程序使其他应用程序可以访问本地文件。第二个链接描述了删除方法的实现,该方法甚至在第三方应用程序完全打开文件之前从文件结构中删除文件(并解释了为什么这是可能的)。

所以基本上,解密后,您创建一个可从内容提供者访问的文件,用另一个应用程序打开它并立即删除它。

对于有根手机,这仍然不是 100% 的解决方案,因为它们可以监控本地文件结构的变化,并在文件创建后立即复制文件。

于 2013-05-07T19:42:22.110 回答