android webView访问临时文件

android webView访问临时文件,android,html,webview,Android,Html,Webview,我想知道是否有一种方法可以下载webView在加载内部html源代码时从外部链接加载的文件。 例如,我有一个从外部链接加载图像的简单html字符串: <html> <body> <h2>Some text</h2> <img src="http://s22.postimg.org/473fk850x/dejit.jpg" </body> </html> 但是我怎样才能从webView下载它作为一个文件,我假设有一种临

我想知道是否有一种方法可以下载webView在加载内部html源代码时从外部链接加载的文件。 例如,我有一个从外部链接加载图像的简单html字符串:

<html>
<body>
<h2>Some text</h2>
<img src="http://s22.postimg.org/473fk850x/dejit.jpg"
</body>
</html>
但是我怎样才能从webView下载它作为一个文件,我假设有一种临时文件,图像首先进入,然后加载到webView中。我不想从这里获取链接并再次下载,这是双向交通


请注意,我需要对所有加载的资源(如img或css)执行此操作,以使我自己的缓存实现也能在脱机模式下工作-如果没有internet连接,我将用内部链接替换外部链接…

您可以覆盖webView的所有资源加载

myWebView.setWebViewClient(new WebViewClient() {
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
                if (/*has internet*/) {
                    WebResourceResponse resultFromInternet = super.shouldInterceptRequest(view, request);
                    // store result to internet
                    return resultFromInternet;
                } else {
                    // return resource from local cache
                    return new WebResourceResponse(...);
                }
            }
        });

关键是,我希望只存储结果——img、css或js——并非所有源代码都存储在我的文件中,但不复制流量,在webview中加载它们并单独下载它们。我想以某种方式从webView中获取它们。但是你从互联网上得到的结果都是源代码,包括htmlyou可以从下载的资源中获取mimetype,并只保存到本地缓存text/css、image/*、text/javascript等,API 21中添加了java.io.InputStream,在我的gradle文件中指示minSdkVersion 17-targetSdkVersion 22,并且此方法根本没有运行…对于旧sdk版本,您可以使用不推荐的java.lang.String
myWebView.setWebViewClient(new WebViewClient() {
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
                if (/*has internet*/) {
                    WebResourceResponse resultFromInternet = super.shouldInterceptRequest(view, request);
                    // store result to internet
                    return resultFromInternet;
                } else {
                    // return resource from local cache
                    return new WebResourceResponse(...);
                }
            }
        });