Android: извлеките ZIP в память и покажите его содержимое в WebView - PullRequest
3 голосов
/ 14 августа 2011

У меня есть сайт в ZIP-файле. Я хотел бы разархивировать его в памяти (не на локальный диск), а затем отобразить его в WebView. Этот ZIP-файл содержит каталог изображений с изображениями, и эти файлы также должны быть доступны для WebView. Я думаю о создании нового ContentProvider, но я не уверен, что знаю, как в этом случае:).

Пожалуйста, помогите примеры кода. Thx!

1 Ответ

1 голос
/ 16 марта 2012

Вы можете посмотреть на 2 вещи:

  1. с использованием потока канала, как в FileProvider
  2. Использование нового расширения APK в качестве основы для вашей логики здесь

В моем поставщике контента есть следующее:

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();
    }
}
...