Android:将ZIP解压缩到内存中并在WebView中显示其内容

时间:2011-08-14 11:59:28

标签: android memory zip android-contentprovider

我有一个ZIP文件的网站。我想将其解压缩到内存中(而不是本地磁盘),然后在WebView中显示它。此ZIP文件包含带有图像的图像目录,WebView也可以访问这些文件。我正在考虑创建新的ContentProvider,但我不确定在这种情况下我该怎么知道:)。

请帮助代码示例。 THX!

1 个答案:

答案 0 :(得分:1)

您可以查看两件事:

  1. 使用管道流,如FileProvider
  2. 使用新的APK扩展程序作为逻辑基础here
  3. 我的内容提供商中有以下内容:

    private ContentProvider.PipeDataWriter<ZipFile> pipe = new EcoPipeDataWriter();
    
    @Override
    public AssetFileDescriptor openAssetFile(Uri uri, String mode)
            throws FileNotFoundException {
        ZipFile zip = getZip(uri);
                Bundle data = new Bundle();
                // put file name in bundle
        return new AssetFileDescriptor(openPipeHelper(uri, null, data, zip,
                pipe), 0, zip.getUncompressSize());
    
    }
    

    管道流:

    @Override
    public void writeDataToPipe(ParcelFileDescriptor output, Uri uri, String s, Bundle bundle, ZipFile zipFile) {
        final String filePath = bundle.getString(FILE_PATH_KEY);
    
        byte[] buffer = new byte[8192];
        FileOutputStream fout = new FileOutputStream(output.getFileDescriptor());
        try {
            // iterate throught zipfile until filenamea has been reach
    
            InputStream in = zipFile.getInputStream(fileHeader);
            int n;
            while ((n = in.read(buffer)) >= 0) {
                fout.write(buffer, 0, n);
            }
        } catch (ZipException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }