从Url缓存并保存所有图像在WebView中加载并加载它

时间:2016-02-06 04:04:35

标签: android image caching webview

我在Android中运行Web应用程序。我可以缓存我的网页,所以如果用户没有网络连接,他仍然可以从缓存访问网页。 但它仅在用户没有互联网连接时运行。

现在,为了优化我的应用,当用户有互联网连接时,我想要缓存WebView中显示的所有图片并将其存储在本地/缓存它,当用户打开一个我已缓存它的具有相同src图像的页面,它从本地加载,而不是再次从Web加载它。或者可能不是图片,但访问过的html页面会将其缓存,当用户再次返回到网址页面时,Webview会从本地加载,而不是从互联网加载。

我已经搜索了两天的代码,但仍未找到解决方案。

感谢您的帮助。

1 个答案:

答案 0 :(得分:8)

试试这个

private void enableWVCache() {

      webView.getSettings().setDomStorageEnabled(true);

      // Set cache size to 8 mb by default. should be more than enough
      webView.getSettings().setAppCacheMaxSize(1024*1024*8);

      File dir = getCacheDir();
      if (!dir.exists()) {
            dir.mkdirs();
         }
      webView.getSettings().setAppCachePath(dir.getPath());
      webView.getSettings().setAllowFileAccess(true);
      webView.getSettings().setAppCacheEnabled(true);

      webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
}

然后

if ( !isNetworkAvailable() ) { // loading offline
webView.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );

}

并且方法isNetworkAvailable()检查活动网络连接:

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService( CONNECTIVITY_SERVICE );
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

最后,不要忘记将以下三个权限添加到AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>