WebView缓存图片的获取

来源:互联网 发布:ubuntu系统u盘制作 编辑:程序博客网 时间:2024/06/11 18:51

在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函数中,可以自己管理图片下载或图片缓存,这样就可以随心所欲的管理网页的缓存内容了。

0 0
原创粉丝点击