2016-11-29 2 views
4

Контекст:Загрузить изображение из местной частной директории в WebView

Мое приложение иногда отображает «Ведомостям», которые являются HTML-файлы, содержащие тексты и изображения:

<p>image description </p> 
<p><img src="/api/medias/get/videos/56afad6447eba61c8099544b?thumbnail=true&amp;company=4f86d0a9d655ab9794f5d1d2&amp;fullSizedCover=true" 
    alt="" 
    data-id="56afad6447eba61c8099544b" 
    data-type="video" data-width="640" data-height="1136" /></p> 

Затем я использую body.loadDataWithBaseURL(<my api url>, body, "text/html; charset=UTF-8", null, null);

Я не думаю, что это актуально, но я скажу это на всякий случай, у меня есть тело шаблона, содержащее css и javascript. js-скрипт обнаруживает изображения, щелкнув и передавая «идентификатор данных» в метод android (через JavascriptInterface). В этом случае он открывает видеопроигрыватель и воспроизводит его.


Проблема:

Мое приложение позволяет пользователю загружать эти листы для последнего автономного визуализация. Поэтому я загрузить HTML, а затем загрузить изображения в моей локальной частной директории (Context.getFileDir()) и изменить ГКЗ HTML, чтобы установить «Ленфильм» источники к изображениям Скачал:

<p>video</p> 
<p><img src="69c623955ecb5bd414f908cd383f3809.jpg" 
    alt="" 
    data-id="56afad6447eba61c8099544b" 
    data-type="video" data-width="640" data-height="360" /></p> 

Мой вопрос: Что я ставлю в качестве базового url для своего веб-представления для получения ожидаемого поведения (т. е. отобразить загруженные изображения).

Я пробовал Context.getFileDir().getAbsolutePath(), content://com.android.htmlfileprovider и некоторые другие.

Должен ли я поступать по-другому?

Спасибо большое,


Это хорошо работает:

Picasso.with(iv.getContext()).load(new File(getContext().getFilesDir() + "/" + "69c623955ecb5bd414f908cd383f3809.jpg")).into(iv);

HTML-:

<p>video</p> 
<p><img src="69c623955ecb5bd414f908cd383f3809.jpg" alt="" data-id="56afad6447eba61c8099544b" data-type="video" data-width="640" data-height="360" /></p> 

мой базовый URL: baseUrl = Uri.fromFile(getContext().getFilesDir()).toString();

И, наконец: webview.loadDataWithBaseURL(baseUrl, body, "text/html; charset=UTF-8", null, null);

+0

«Я попробовал Context.getFileDir(). GetAbsolutePath(),» - попробуйте это, но с помощью схемы 'file'. Легче использовать 'Uri.fromFile (getFilesDir()). ToString()'. – CommonsWare

+0

Мои изображения по-прежнему не отображаются вместе с этим baseUrl: 'file: /// data/user/0//files', wheareas' new File (Context.getFilesDir() + "/" + "69c623955ecb5bd414f908cd383f3809.jpg") .exists() '== верно. –

+0

@CommonsWare также полезны? (ничего не было, просто добавил, но он ничего не меняет): - 'body.getSettings(). setAllowFileAccess (true);' - 'body.getSettings(). setAllowContentAccess (true) ; ' -' body.getSettings().setAllowFileAccessFromFileURLs (true); ' -' body.getSettings(). setAllowUniversalAccessFromFileURLs (true); ' –

ответ

0

Вы можете попробовать использовать нулевой BaseUrl, если вы уже загрузили/есть шаблон, а просто передать этот шаблон HTML как тела WebView. И прежде, чем передать в него img-теги и установите img src с полным путем к локально сохраненному файлу. Smth like:

Document doc = Jsoup.parse(newHtml); 
Elements elems = doc.getElementsByTag("img"); 
for (Element el : elems) { 
    String filename = el.attr("src"); //presumably only name 
    String picUri = "file:///" + folder + "/"+filename; 
    el.attr("src", picUri); 
} 
web.loadDataWithBaseURL(null, htmlBody, "text/html", "UTF-8", null); 
+0

Я не знаю, почему, но действительно, он не работает, помещая «базу» в базовый url, но передавая null и помещая его вручную в теги src –