在我的WebView中,它加载一个网页,该网页包含一个下载带有base64数据的图像的链接:
<a href="data:image/jpeg;base64,{base64data}" download="fileName.jpg" target="_blank">Download Image</a>
在Chrome浏览器中,当点击它时,它将图像下载为JPG文件。但这在Android WebView中不起作用。
使用android webview下载图片表示我应该使用它shouldOverrideUrlLoading()
来触发下载。
它适用于图像网址,例如http://.../image.jpg
。但是对于我的基本64数据URL,它仅适用于4.4以下的Android版本,该方法shouldOverrideUrlLoading()
从未在Android 4.4+上调用,因为根据Android API指南,它必须是有效的URL 。
所以我的问题是,为什么data:image/jpeg;base64,{base64data}
在这种情况下不是有效的URL?我应该怎么做才能触发shouldOverrideUrlLoading()
base64数据URL?(或者甚至通过在网页上进行更改)
任何建议将不胜感激,我所需要的只是将图像保存在Android中。
如果您需要触发shouldOverrideUrlLoading
数据:URI,只需将其download="fileName.jpg" target="_blank"
从<a>
标签中删除即可。
实际上,download
是阻止shouldOverrideUrlLoading
调用该属性的属性,但是拥有target="_blank"
什么也无济于事,因此也应将其删除。你只需要返回true
从shouldOverrideUrlLoading
以避免实际网页视图导航到图片链接。
我猜想,这种现象的原因是图像是由WebView在内部处理的,因此不考虑将其下载,请参阅DownloadListener是否不下载图像?但是我同意让download
属性在KitKat之前起作用有点奇怪。
但是,当您遵循“使用android webview下载图像”中的建议时,您将面临的下一个问题是DownloadManager
不适用于数据:URIs :)您可以做的只是使用Base64 utils将base64编码的图像转换为二进制文件。 blob,然后自己保存-这样,您就可以有效地下载图像。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句