Открыть файл из архива без временного извлечения

Сейчас я работаю над приложением для просмотра архива, которое позволяет пользователям перемещаться по содержимому архива, извлекать архивы и просматривать файлы внутри архива. я использую java.util.zip API. Для предварительного просмотра файла я временно извлекаю его и открываю как обычный существующий файл. Как вы, возможно, понимаете, это не очень хороший подход, так как он не будет просматривать файлы, если недостаточно места для временного извлечения. Есть ли рабочее решение для прохождения ZipInputStream для Activity открыть его как файл? Есть ли другое решение этой проблемы? Заранее спасибо.

1 ответ

Решение

В принципе, вы могли бы создать ContentProvider это служит ZipInputStream,

В этом примере проекта я демонстрирую, как создать ContentProvider поддержки openFile() который использует трубу, созданную ParcelFileDescriptor.createPipe() подать файл. createPipe() возвращает пару (двухэлементный массив) ParcelFileDescriptors представляя концы трубы. Вы используете второй элемент из массива для записи через OutputStream; openFile() возвращает первый элемент из массива, который должен быть передан Android вызывающему процессу. Звонящий будет использовать openInputStream() читать то, что вы передаете по трубе.

В моем случае я отправляю актив, по которому я получаю InputStream с помощью AssetManager, В вашем случае вы бы использовали ZipInputStream,

Обратите внимание, что в моем примере проекта предполагается, что он выполняется на устройстве с программой просмотра PDF, поскольку он обслуживает PDF из ресурсов и пытается открыть его с помощью startActivity(),

Другие вопросы по тегам