Android 从Url缓存并保存WebView中的所有图像内容,然后将其加载

Android 从Url缓存并保存WebView中的所有图像内容,然后将其加载,android,image,caching,webview,Android,Image,Caching,Webview,我有在Android上运行的Web应用程序。我可以缓存我的web,所以若用户并没有internet连接,他仍然可以从缓存访问web但它仅在用户未连接Internet时运行 现在,为了优化我的应用程序,当用户连接到互联网时,我想缓存WebView中显示的所有图像,并将其本地存储/缓存,当用户打开与我缓存的src图像相同的页面时,从本地加载,而不是再次从web加载。或者可能不是图像,而是访问它的html页面缓存它,当用户再次返回url页面时,Webview从本地而不是从internet加载它 我已经

我有在Android上运行的Web应用程序。我可以缓存我的web,所以若用户并没有internet连接,他仍然可以从缓存访问web但它仅在用户未连接Internet时运行

现在,为了优化我的应用程序,当用户连接到互联网时,我想缓存
WebView
中显示的所有图像,并将其本地存储/缓存,当用户打开与我缓存的src图像相同的页面时,从本地加载,而不是再次从web加载。或者可能不是图像,而是访问它的
html
页面缓存它,当用户再次返回url页面时,
Webview
从本地而不是从internet加载它

我已经搜索代码两天了,但仍然没有找到解决方案

谢谢你的帮助。

试试这个

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"/>


谢谢,但它会缓存所有页面吗?我只想缓存图像。@MukhlisSaputro它缓存整个页面。