从Web视图中的本地私有目录加载图像

Ren*_*ier 5 android android-webview

内容:

我的应用有时显示“ Sheets”,它们是包含文本和图像的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>
Run Code Online (Sandbox Code Playgroud)

然后我用 body.loadDataWithBaseURL(<my api url>, body, "text/html; charset=UTF-8", null, null);

我认为这无关紧要,但是为了防万一,我有一个包含CSS和JavaScript的模板主体。js脚本检测点击的图像并将“数据ID”传输到android方法(通过JavascriptInterface)。在这种情况下,它将打开视频播放器并播放。


问题:

我的应用程序允许用户下载这些表格以进行离线脱机处理。因此,我下载了html,然后将图像下载到了本地私有目录(Context.getFileDir()),并更改了html的src,将“缩略图”源设置为我下载的图像:

<p>video</p>
<p><img src="69c623955ecb5bd414f908cd383f3809.jpg" 
    alt="" 
    data-id="56afad6447eba61c8099544b" 
    data-type="video" data-width="640" data-height="360" /></p>
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何将基本URL放置到Webview中,以获取预期的行为(即:显示下载的图像)。

我想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>
Run Code Online (Sandbox Code Playgroud)

我的基本网址: baseUrl = Uri.fromFile(getContext().getFilesDir()).toString();

最后: webview.loadDataWithBaseURL(baseUrl, body, "text/html; charset=UTF-8", null, null);

sht*_*lik 2

如果您已经下载/拥有模板,则可以尝试使用 null baseUrl,然后将该 html 模板作为正文传递给 webview。在传递之前,在其中找到 img 标签,并使用本地存储文件的完整路径设置 img src 。有点像:

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);
Run Code Online (Sandbox Code Playgroud)