如何将图像从扩展文件加载到webview中

时间:2012-10-25 17:00:13

标签: image webview apk-expansion-files

在我们的应用程序中,我们有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?

除了解压缩扩展文件之外的任何其他建议?任何帮助将非常感激。我花了几天时间研究这个

3 个答案:

答案 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。