未连接到服务器时从Android webview中的应用缓存加载

时间:2016-11-16 21:14:48

标签: javascript java android webview html5-appcache

我有一个使用webview的Android应用。有一个java后端服务器,它提供所有前端文件,并通过apache tomcat构建缓存清单。

我的问题是,我不确定如何在未连接服务器时从应用缓存加载webview,但设备已连接到互联网。

如果我进入应用程序代码,我可以强制它使用缓存

webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);

所以我知道我的文件被适当地缓存了。我还尝试了其他堆栈溢出问题的解决方案,让我检查网络状态并根据网络状态设置缓存模式,如下所示:

     cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE);
     if(cm.getActiveNetworkInfo().isConnected()) ....

但是,在设备处于联机状态但我的服务器已关闭的情况下,这不起作用。它仍然表示网络在这种情况下很好,并且不会从缓存中加载。

理想的解决方案是,当前端webview尝试通过网络访问资源并且它不可用时,它只是从缓存加载,这正是它在普通浏览器中的工作方式。但我可以接受变通办法,例如让应用程序检测到我的特定服务器的网络连接并同时更改缓存模式。

任何人都知道这个问题的最佳方法吗?感谢。

1 个答案:

答案 0 :(得分:1)

所以问题似乎是android根本就不使用HTML5应用程序缓存,除非你告诉它,这真的让我的想法失去了。我使用以下代码解决了它:

final WebSettings webviewSettings = webView.getSettings();
final String appCachePath = this.getCacheDir().getAbsolutePath();
webviewSettings.setDomStorageEnabled(true);
webviewSettings.setAppCachePath(appCachePath);
webviewSettings.setAllowFileAccess(true);
webviewSettings.setAppCacheEnabled(true);
webviewSettings.setCacheMode(WebSettings.LOAD_DEFAULT);

然后它表现出我期望app缓存的行为方式。即,如果无法通过网络加载资源,它会从缓存中加载资源,如缓存清单中的CACHE部分所指定的那样。