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

Image 如何将图像从扩展文件加载到webview,image,webview,apk-expansion-files,Image,Webview,Apk Expansion Files,在我们的应用程序中,我们有从资产目录加载到webview的html页面。它们依次从同一位置加载jpg图像。由于GooglePlay的50mg应用程序大小限制,我需要将jpg移动到扩展文件中。出于安全原因,我们不想移动html页面。谁能告诉我如何将jpg从扩展文件加载到html网页中 谢谢 克里斯汀 还有一些想法: 此链接提出了一个类似的问题,但仍未得到回答: 此链接确实有答案,但它们似乎不完整,至少是出于我的需要: 我认为扩展文件APEZProvider的URI接口为扩展文件创建了一个Conte

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

谢谢

克里斯汀

还有一些想法:

此链接提出了一个类似的问题,但仍未得到回答:

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

我认为扩展文件APEZProvider的URI接口为扩展文件创建了一个ContentProvider,请参阅,这可能是一种方法,但我不清楚如何将信息获取到Javascript。目前我们正在使用:

我已经尝试过重写ShouldInterceptRequest,如中所述, 希望在图像即将加载时得到回调,这样我就可以修改url,但shouldInterceptRequest没有被调用

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


除了解压缩扩展文件,还有其他建议吗?任何帮助都将不胜感激。我现在已经花了几天的时间研究这个问题了

为了让其他人受益,我有一个解决方案,至少对于API 11和更高版本。我发现ShouldInterceptRequest实际上只有在webview.loadUrlassetFile在资产文件夹中找不到文件时才会被调用。也许这应该是显而易见的,但我还没有在任何地方看到它的文档,我想我已经尝试删除该文件,但一定是做了其他错误的事情 n应按如下方式进行交互:

    @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文件加载图像时,似乎不会调用它,只有当前进到一个全新的网页时才会调用它。为了使其他人受益,我有一个解决方案,至少对于API 11和更高版本。我发现ShouldInterceptRequest实际上只有在webview.loadUrlassetFile在资产文件夹中找不到文件时才会被调用。也许这应该是显而易见的,但我还没有在任何地方看到它的文档,我想我已经尝试删除该文件,但一定是做了其他错误的事情 n应按如下方式进行交互:

    @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文件加载图像时,似乎不会调用它,只有在进入一个全新的网页时才会调用它。API 10的第一个答案是有效的。谢谢你,库尔巴尼!对不起,我不能推翻你的答案,因为我没有这个名声

Christine的第一个答案适用于API 10。谢谢你,库尔巴尼!对不起,我不能推翻你的答案,因为我没有这个名声


克里斯汀

只是对克里斯·福塞特答案的补充。定期调用shoulInterceptRequest以加载资产文件夹之外的图像。我被这件事困扰了很长一段时间。多亏了克里斯。

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

为了澄清这一点,webview.loadUrlassetFile确实从资产文件夹加载html文件。但是html文件会加载扩展文件中的图像文件。现在可以从ShouldInterceptRequest加载这些文件,当在资产文件夹中找不到图像时,会调用ShouldInterceptRequest。为了澄清这一点,webview.loadUrlassetFile会从资产文件夹加载html文件。但是html文件会加载扩展文件中的图像文件。现在从ShouldInterceptRequest加载这些文件,当在资产文件夹中找不到图像时,调用该请求。绝对不可能的副本。这是关于如何访问存储在扩展文件中的图像。当文件被隐藏在压缩扩展文件中时,您可以打开*jpg文件,但绝对不能重复。这是关于如何访问存储在扩展文件中的图像。当*jpg文件隐藏在压缩扩展文件中时,您只需打开该文件即可。fileStack溢出可以轻松地将一个问题链接到另一个问题。我已经投票结束这个问题,作为你链接的问题的重复。在问题的顶部,应该有一个横幅,问你这个链接是否解决了你的问题。当然,因为它是这样做的,所以您可以单击它所做的按钮。一旦你做到了这一点,路过的人就更容易不去了
冻结链接,您可以删除此答案。堆栈溢出使将一个问题链接到另一个问题变得容易。我已经投票结束这个问题,作为你链接的问题的重复。在问题的顶部,应该有一个横幅,问你这个链接是否解决了你的问题。当然,因为它是这样做的,所以您可以单击它所做的按钮。一旦你这样做了,路过的人会更容易注意到这个链接,你可以删除这个答案。