我在Android中运行Web应用程序。我可以缓存我的网页,所以如果用户没有网络连接,他仍然可以从缓存访问网页。 但它仅在用户没有互联网连接时运行。
现在,为了优化我的应用,当用户有互联网连接时,我想要缓存WebView
中显示的所有图片并将其存储在本地/缓存它,当用户打开一个我已缓存它的具有相同src图像的页面,它从本地加载,而不是再次从Web加载它。或者可能不是图片,但访问过的html
页面会将其缓存,当用户再次返回到网址页面时,Webview
会从本地加载,而不是从互联网加载。
我已经搜索了两天的代码,但仍未找到解决方案。
感谢您的帮助。
答案 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"/>