在我们的应用程序中,我们有html页面,从资产目录加载到webview中。这些反过来从同一个地方加载jpg图像。由于Google Play的应用程序大小限制为50毫克,我需要将jpg移动到扩展文件中。出于安全原因,我们不想移动html页面。任何人都可以告诉我如何将扩展文件中的jpg加载到html网页中?
由于
恭
还有一些想法:
这个链接发布了一个类似的问题,但仍然没有答案:
Using images from apk expansion file in android webview
此链接确实有答案,但它们似乎不完整,至少对我的需求而言:
How we can use images from APK main expansion file?
我认为扩展文件的URI接口(APEZProvider为ExpansionFile创建ContentProvider,请参阅http://developer.android.com/guide/google/play/expansion-files.html#ZipLib)可能是要走的路,但我不清楚如何将信息传递给Javascript。目前我们正在使用:
我已按照webview shouldinterceptrequest example的建议尝试覆盖ShouldInterceptRequest, 期待在即将加载图像时获得回调,以便我可以修改url,但是不会调用shouldInterceptRequest。
那么,有没有人有任何想法如何拦截jpg的加载并将URL重定向到从扩展文件的ContentProvider获得的URL?
除了解压缩扩展文件之外的任何其他建议?任何帮助将非常感激。我花了几天时间研究这个
答案 0 :(得分:4)
为了其他人的利益,我有一个解决方案,至少对于API 11及更高版本。我发现,只有当webview.loadUrl(assetFile)在资产文件夹中找不到该文件时,事实上才会调用ShouldInterceptRequest。也许这应该是显而易见的,但我没有看到它记录在任何地方(我以为我曾尝试删除该文件,但一定做了别的错误) n shouldInterceptRequest如下所示:
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url)
{
String fileName = url.substring(assetPrefix.length());
InputStream inputStream = expansionFile.getInputStream(fileName);
if (url.endsWith("jpg") || url.endsWith("png"))
return new WebResourceResponse("image/*", "base64", inputStream);
return super.shouldInterceptRequest(view, url);
}
现在,如果有人对API 10的解决方案有任何想法仍然会受到赞赏。我已经看到了一个覆盖shouldOverrideUrlLoading(我们正在为其他目的做)的建议,但是当从html文件加载图像时,似乎没有调用,只有当它进入一个全新的网页时
答案 1 :(得分:0)
How to load an image stored in a byte array to WebView?的第一个答案适用于API 10.谢谢Qorbani!抱歉,我无法提供您的答案,因为我没有声誉
恭
答案 2 :(得分:0)
只是Chris Fawcett回答的补充。定期调用 shouldInterceptRequest 以加载资产文件夹之外的图像。我坚持了很长一段时间。谢谢Chris。