现在我正在开发一个存档浏览应用程序,它允许用户浏览存档内容,提取存档并预览存档中的文件。我正在使用java.util.zip
API。要预览文件,我暂时将其解压缩并将其作为通常的现有文件打开。您可能已经理解,这不是一个好方法,因为如果没有足够的空间来进行临时提取,它将不会预览文件。是否有将ZipInputStream
传递给Activity
以将其作为文件打开的工作解决方案?这个问题还有另一种解决方法吗?提前谢谢。
答案 0 :(得分:2)
原则上,您可以创建一个ContentProvider
来提供ZipInputStream
。
在this sample project中,我演示了如何创建ContentProvider
支持openFile()
,使用ParcelFileDescriptor.createPipe()
创建的管道来提供文件。 createPipe()
返回表示管道末端的ParcelFileDescriptors
对(双元素数组)。您使用数组中的第二个元素通过OutputStream
写入; openFile()
返回数组中要传递给调用进程的第一个元素。调用者将使用openInputStream()
读取您通过管道传输的内容。
在我的情况下,我发送的资产是通过InputStream
获得AssetManager
的。在您的情况下,您将使用ZipInputStream
。
请注意,我的示例项目假设它正在具有PDF查看器的设备上运行,因为它正在从资源中提供PDF并尝试通过startActivity()
打开它。