使用webView的loadDataWithBaseURL方法无法从SD卡加载图片。

3
我想在我的webview中设置一些带图片的html内容。我在网上阅读到需要使用loadDataWithBaseUrl函数来实现这一点,因为我需要链接图片文件夹的basUrl以便按顺序显示图片。
我的html内容能够正常加载,甚至可以完美运行javascripts,但由于某些原因,我的图片无法加载。
我曾经在某个地方读到过一些安全原因,这就是为什么我不能将sd卡中的图片加载到webview中,还有一些人说可以通过loadDataWithBaseUrl轻松实现,所以我真的不知道哪一个是正确的。
以下是我尝试的方法,可能有些错误,请不要粗鲁:
我在这里获取了我的html文件:
mnt/sdcard/com.mypackage.myproject/3/3.html

这里是我的图片:

mnt/sdcard/com.mypackage.myproject/3/images/Cover.png

这是我的内容加载:

myWebView.loadDataWithBaseURL("file:///mnt/sdcard/com.mypackage.myproject/3", myHtml, "text/html", "utf-8", "");

在我的 HTML 代码中:

<img src="images/Cover.png" alt="Cover.png" height="820"/>

你可以看到我提供了baseUrl,但是某些情况下Webview无法加载我的图片。

许多人认为这可能是一个解决方案:

mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setBuiltInZoomControls(true);
String base = Environment.getExternalStorageDirectory().getAbsolutePath().toString();
String imagePath = "file:/"+ base + "/test.jpg";
String html = "<html><head></head><body><img src=\""+ imagePath + "\"></body></html>";
mWebView.loadData(html, "text/html","utf-8");

但是,我有700个不同的HTML文件,并且有许多图片在许多不同的位置...所以我无法修改HTML代码。

有没有一种方法可以将图像文件夹链接到我的HTML文件中,以便将它们适当地用作baseUrl?


你看过这个网址吗?https://dev59.com/9k7Sa4cB1Zd3GeqP4IWq - user370305
是的,但这个问题与SD卡无关。 - Adam Varhegyi
可能是在WebView中加载保存在SD卡中的图像的重复问题。 - Praveenkumar
如果你仔细阅读了注释,那么这个问题肯定会对你有所帮助。 - user370305
你必须使用文件URI来在WebView中加载图像。 - user370305
2个回答

3
你的加载语句存在语法错误。你需要在 file 后面加上 :
myWebView.loadDataWithBaseURL("file:///mnt/sdcard/com.mypackage.myproject/3", myHtml, "text/html", "utf-8", "");

我回答时并不是现在。 - Iñigo
哦,好的。我误解了你的回答。;) - Iñigo

0

在 HTML 中,您不需要将图像的完整路径放入其中。

img src="images/test1.jpg"

相反地,

img src=\""+ imagePath + "\"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接