2

在我们的应用程序中,我们有从资产目录加载到 webview 的 html 页面。这些依次从同一个地方加载 jpg 图像。由于 Google Play 的 50mg 应用程序大小限制,我需要将 jpg 移动到扩展文件。出于安全原因,我们不想移动 html 页面。谁能告诉我如何将扩展文件中的 jpg 加载到 html 网页中?

谢谢

克里斯汀

还有一些想法:

此链接发布了一个类似的问题,但仍未得到解答:

在android webview中使用apk扩展文件中的图像

此链接确实有答案,但它们似乎不完整,至少对于我的需要:

我们如何使用 APK 主扩展文件中的图像?

我在想扩展文件的 URI 接口(APEZProvider 为 ExpansionFile 创建一个 ContentProvider,参见http://developer.android.com/guide/google/play/expansion-files.html#ZipLib)可能是去,但我不清楚如何将信息获取到 Javascript。目前我们正在使用:

我尝试过覆盖 ShouldInterceptRequest,如 webview shouldinterceptrequest example中所建议的那样,期望在即将加载图像时获得回调,以便我可以修改 url,但 shouldInterceptRequest 不会被调用。

那么,是否有人知道如何拦截 jpg 的加载并将 URL 重定向到从扩展文件的 ContentProvider 获得的 URL?

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

4

3 回答 3

4

为了其他为此苦苦挣扎的人的利益,我有一个解决方案,至少适用于 API 11 及更高版本。我发现 ShouldInterceptRequest 实际上只有在 webview.loadUrl(assetFile) 没有在资产文件夹中找到文件时才会被调用。也许这应该是显而易见的,但我还没有在任何地方看到它的记录(我以为我曾尝试删除该文件,但肯定做错了其他事情) 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 文件加载图像时似乎不会调用它,只有在前进到一个全新的网页时

于 2012-10-30T15:45:46.130 回答
0

如何将存储在字节数组中的图像加载到 WebView的第一个答案适用于 API 10。谢谢 Qorbani!抱歉,我无法为您的答案投票,因为我没有声誉

克里斯汀

于 2012-11-13T19:52:56.860 回答
0

只是对克里斯福塞特的回答的补充。shouldInterceptRequest会定期调用以加载资产文件夹之外的图像。我被这个问题困扰了很长一段时间。感谢克里斯。

于 2014-05-09T10:55:13.443 回答