WebView缓存图片的获取

管理Native+Web手机APP中的图片缓存及分享
本文详细介绍了如何在Native+Web的手机APP中从缓存中获取图片并分享到微博或微信等平台的方法。通过利用WebViewClient的shouldInterceptRequest回调函数,实现对图片资源的本地管理,从而灵活控制网页缓存内容。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值