我实际上是java编程的新手,但我一直在关注我的问题的几个解决方案,但没有找到一个适合我的情况,我似乎无法正确地解决代码。< / p>
我希望有一个WebView,当手机在线时打开一个在线页面(例如google),并在手机离线时打开一个本地html页面。
同时虽然我希望手机在线时覆盖本地页面,以便离线本地页面始终更新到上次手机连接到互联网时。
任何想法如何做到这一点?一些简单的指向正确的方向可能有所帮助。
非常感谢
我的源代码
WebView engine=(WebView)findViewById(R.id.webView);
engine.getSettings().setJavaScriptEnabled(true);
engine.getSettings().setBuiltInZoomControls(true);
engine.getSettings().setLoadsImagesAutomatically(true);
engine.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
engine.setInitialScale(1);
engine.setWebChromeClient(new WebChromeClient() {
@Override
public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota,QuotaUpdater quotaUpdater)
{
quotaUpdater.updateQuota(spaceNeeded * 2);
}
public void onProgressChanged(WebView view, int progress)
{
activity.setTitle("Loading...");
activity.setProgress(progress * 100);
if(progress == 100)
{ activity.setTitle(R.string.app_name);
}
}
});
engine.getSettings().setDomStorageEnabled(true);
// Set cache size to 8 mb by default. should be more than enough
engine.getSettings().setAppCacheMaxSize(1);
engine.getSettings().setAllowFileAccess(true);
engine.getSettings().setAppCacheEnabled(true);
engine.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
noCacheHeaders.put("Pragma", "no-cache");
noCacheHeaders.put("Cache-Control", "no-cache");
// engine.loadUrl("http://www.stackhand.com", noCacheHeaders);
cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE);
if(cm.getActiveNetworkInfo().isConnected())
{
engine.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
}
else{
engine.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
engine.loadUrl("http://www.stackhand.com", noCacheHeaders);
使用此功能在线和离线检查网络
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager)
getSystemService( CONNECTIVITY_SERVICE );
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
答案 0 :(得分:1)
首先在HTML中创建您想要在离线时显示的页面。并将它放在您的资源文件夹中,我们称之为mypage.html然后使用onReceivedError: 添加以下代码,
mWebView.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
mWebView.loadUrl("file:///android_asset/mypage.html");
}