如何在 Android WebView 中加载本地图像
Posted
技术标签:
【中文标题】如何在 Android WebView 中加载本地图像【英文标题】:How to load local image in Android WebView 【发布时间】:2017-07-05 02:39:14 【问题描述】:我正在尝试将存储在数据库中的包含图像的 html 字符串加载到WebView
中。图像存储在内部存储器中。我给出了对 html 字符串的引用。但它不起作用。有什么帮助吗?
String content="<p>Can we have a rotational" +
" symmetry of order more than 1 whose angle of rotation is </p>\n" +
"\n <p>(i) <img alt=\"45\\degree\" src=\"file:///storage/emulated/01484890695248.jpg\" /></p>\n" +
"\n<p>(ii) <img alt=\"35\\degree\" src=\"file:///storage/emulated/01484890697301.jpg\" /></p>";
WebView00.loadDataWithBaseURL("", content, "text/html","UTF-8", "");
WebView00.getSettings();
【问题讨论】:
您是否添加了读取权限?以及 API>23 的运行时权限 查看***.com/questions/4543349/… 这可能会帮助你***.com/a/65563997/3886504 【参考方案1】:这样试试
String base = Environment.getExternalStorageDirectory().getAbsolutePath().toString();
String imagePath = "file://"+ base + "/image_name.jpg";
String html = "<html><head></head><body> <img src=\""+ imagePath + "\"> </body></html>";
webView.loadDataWithBaseURL("", html, "text/html","utf-8", "");
【讨论】:
非常感谢。在网上搜索了 3 个小时。 对不起。不知道这个功能.. :( 你是如何定义webView
的?
这不再适用于 android 11 存储策略。【参考方案2】:
将图像放在您的assets
文件夹中。然后使用对应的前缀
file:///android_asset/
【讨论】:
【参考方案3】:问题出在文件路径上
file:///storage/emulated/01484890695248.jpg
应该是
file:///storage/emulated/0/01484890695248.jpg
感谢@Charuක 的帮助..
【讨论】:
【参考方案4】:在最新的 android 版本中,我们无法访问诸如 assets
、存储中的文件等资源。 https://developer.android.com/reference/androidx/webkit/WebViewAssetLoader 是继续进行的最佳指南。 WebViewAssetLoader
及其内部类有助于访问它们。
您可以查看以下示例代码。
final WebViewAssetLoader assetLoader = new WebViewAssetLoader.Builder()
.addPathHandler("/assets/", new WebViewAssetLoader.AssetsPathHandler(this)) //****for assets****
.addPathHandler("/images/", new WebViewAssetLoader.InternalStoragePathHandler(context, getFilesDir()))//****for files****
.build();
webView.setWebViewClient(new WebViewClient()
@Override
public WebResourceResponse shouldInterceptRequest(WebView view,
WebResourceRequest request)
return assetLoader.shouldInterceptRequest(request.getUrl());
);
String assetsPic = "<img width='42px' height='58px' src='https://appassets.androidplatform.net/assets/pic.png'/>";
String storagePic = "<img width='42px' height='58px' src='https://appassets.androidplatform.net/images/pic.jpg'/>";
webView.loadData(assetsPic+"<br>"+storagePic, "text/html", "UTF-8");
【讨论】:
以上是关于如何在 Android WebView 中加载本地图像的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin 移动应用开发指南 - 如何在 iOS、Android 和 UWP 的 WebView 中加载本地网站 (HTML/CSS/JS ..) [重复]