как загрузить изображение из файла расширения в веб-просмотр

В нашем приложении у нас есть html-страницы, которые загружаются в веб-просмотр из каталога ресурсов. Они, в свою очередь, загружают изображения jpg из того же места. Мне нужно переместить jpg в файл расширения из-за ограничения размера приложения в 50 мг в Google Play. Мы не хотим перемещать html-страницы по соображениям безопасности. Может ли кто-нибудь сказать мне, как загрузить jpg из файла расширения на веб-страницу html?

Спасибо

Кристин

Еще несколько мыслей:

Эта ссылка публикует аналогичный вопрос, но остается без ответа:

Использование изображений из файла расширения apk в веб-просмотре Android

В этой ссылке есть ответы, но они кажутся неполными, по крайней мере, для моих нужд:

Как мы можем использовать изображения из основного файла расширения APK?< /а>

Я думаю, что интерфейс URI для файла расширения (APEZProvider создает ContentProvider для файла расширения, см. http://developer.android.com/guide/google/play/expansion-files.html#ZipLib) может подойти, но я не понимаю, как получить информацию к яваскрипту. В настоящее время мы используем:

I've tried overriding ShouldInterceptRequest, as suggested in webview shouldinterceptrequest example, expecting to get a callback when the image is about to be loaded, so that I could then modify the url, but shouldInterceptRequest doesn't get called.

Итак, есть ли у кого-нибудь идеи, как перехватить загрузку jpg и перенаправить URL-адрес на тот, который получен из ContentProvider файла расширения?

Любые другие предложения, кроме распаковки файла расширения? Любая помощь приветствуется. Я провел несколько дней, изучая это сейчас


person Chris Fawcett    schedule 25.10.2012    source источник
comment
Возможный дубликат Как загрузить изображение хранится в массиве байтов в WebView?   -  person zondo    schedule 27.07.2016
comment
Точно нет. Это о том, как получить доступ к изображению, хранящемуся в файле расширения. Вы можете просто открыть файл *jpg, когда файл скрыт в заархивированном файле расширения.   -  person Chris Fawcett    schedule 28.07.2016


Ответы (3)


Для всех, кто борется с этим, у меня есть решение, по крайней мере, для API 11 и выше. Я обнаружил, что ShouldInterceptRequest на самом деле вызывается только в том случае, если webview.loadUrl(assetFile) не находит файл в папке ресурсов. Возможно, это должно было быть очевидным, но я нигде не видел, чтобы это было задокументировано (и я думал, что пытался удалить файл, но, должно быть, сделал что-то еще неправильно) n shouldInterceptRequest выглядит следующим образом:

    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, String url)
    {
        String fileName = url.substring(assetPrefix.length());

        InputStream inputStream = expansionFile.getInputStream(fileName);

        if (url.endsWith("jpg") || url.endsWith("png"))
            return new WebResourceResponse("image/*", "base64", inputStream);

        return super.shouldInterceptRequest(view, url);
    }

Теперь, если у кого-то есть идеи по решению для API 10, это все равно будет оценено. Я видел предложение переопределить shouldOverrideUrlLoading (которое мы делаем для других целей), но это, похоже, не вызывается при загрузке изображения из html-файла, а только при переходе на совершенно новую веб-страницу.

person Chris Fawcett    schedule 30.10.2012
comment
Чтобы уточнить, webview.loadUrl(assetFile) загружает html-файл из папки ресурсов. Но файл html загружает файлы изображений, которые находятся в файле расширения. Теперь они загружаются из ShouldInterceptRequest, который вызывается, когда изображение не найдено в папке ресурсов. - person Chris Fawcett; 30.10.2012

Первый ответ на Как загрузить изображение хранится в массиве байтов в WebView? работает для API 10. Спасибо, Qorbani! Извините, я не могу проголосовать за ваш ответ, потому что у меня нет репутации

Кристин

person Chris Fawcett    schedule 13.11.2012
comment
Stack Overflow позволяет легко связать один вопрос с другим. Я проголосовал за то, чтобы закрыть этот вопрос как дубликат того, на который вы ссылаетесь. В верхней части вопроса должен быть баннер с вопросом, решила ли эта ссылка ваш вопрос. Так как, конечно, это произошло, вы можете нажать кнопку, которую он сделал. Как только вы это сделаете, проходящим людям будет намного легче заметить ссылку, и вы сможете удалить этот ответ. - person zondo; 27.07.2016

Просто дополнение к ответу Криса Фосетта. shouldInterceptRequest регулярно вызывается для загрузки изображений, находящихся за пределами папки assets. Я застрял с этим в течение довольно долгого времени. Спасибо Крису.

person Agnit    schedule 09.05.2014