我正在尝试让网站的 HTML5 离线缓存版本在 WebView 内部出现故障时显示。
我已经覆盖了onReceivedError
好的,当网络中断时调用此方法。
问题是它显示通用的“网页不可用”消息。
如何让它显示页面的 HTML5 缓存版本? Web 应用程序的离线存储肯定可以正常工作,因为它在 Firefox 和 Chrome 的桌面版本中运行良好。
我知道我可以打电话 loadData
在 onReceivedError
中手动进入 View ,但我不确定从哪里可以获取 HTML5 缓存值。
注意:如果我在 loadData
中设置一些虚拟数据例如view.loadData(Uri.encode("<html><div>Page load failed</div></html>"), "text/html", "UTF-8");
然后单击返回(通过检测返回事件并调用 webview.goBack();
然后页面的缓存版本显示正常。
这里是我添加的一些代码行来设置 webview:
webview.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
webview.getSettings().setAppCacheMaxSize(1024*1024*8);
webview.getSettings().setAppCachePath("/data/data/com.stuff.android/cache");
webview.getSettings().setAllowFileAccess(true);
webview.getSettings().setAppCacheEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setJavaScriptEnabled(true);
最佳答案
尝试使用以下方式找出网络状态
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
( Detect whether there is an Internet connection available on Android )
这也需要
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在你的 AndroidManifest.xml 中
现在您可以将缓存行为设置为 LOAD_CACHE_ONLY 或 LOAD_NO_CACHE,具体取决于网络连接是否可用,
webview.getSettings().setCacheMode(...)
关于android - 在android中显示缓存版本的webview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8467998/