在Native+Web的手机APP中,有时候需要获取Web中的某个图片分享到微博或微信等。所以如何从缓存中获取图片呢?以下就是解决方案。
1,对应低版本的android OS中可以通过webviewcache.db,通过图片的url获取对应的filepath。
具体的请看:http://my.oschina.net/u/1777508/blog/325123
2,从API 11(Android 3.0)开始,WebViewClient引入了一个函数 shouldInterceptRequest。
shouldInterceptRequest这个回调可以通知主程序WebView处理的资源(css,js,image等)请求,并允许主程序进行处理后返回数据。
如果主程序返回的数据为null,WebView会自行请求网络加载资源,否则使用主程序提供的数据。注意这个回调发生在非UI线程中,所以进行UI系统相关的操作是不可以的。
shouldInterceptRequest有两种重载。
public WebResourceResponse shouldInterceptRequest (WebView view, String url) 从API 11开始引入,API 21弃用
public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request) 从API 21开始引入
例如:
WebView webView = new WebView(this);
webView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
Log.i(LOGTAG, "shouldInterceptRequest url=" + url + ";threadInfo" + Thread.currentThread());
WebResourceResponse response = null;
if (url.contains("logo")) {
try {
InputStream localCopy = getAssets().open("droidyue.png");
response = new WebResourceResponse("image/png", "UTF-8", localCopy);
} catch (IOException e) {
e.printStackTrace();
}
}
return response;
}
});
setContentView(webView);
webView.loadUrl("http://m.sogou.com");
来源:http://droidyue.com/blog/2014/11/23/block-web-resource-in-webview/
所以在shouldInterceptRequest函数中,可以自己管理图片下载或图片缓存,这样就可以随心所欲的管理网页的缓存内容了。