我其实是Java编程新手,但我一直在跟进我的问题的解决方案,但没有找到适合我情况的,并且我似乎无法正确地编写代码。
我想要一个WebView
,当手机联网时打开在线网页(例如Google),并在手机离线时打开本地HTML页面。
同时,当手机在线时,我希望它覆盖本地页面,以便离线本地页面始终更新为上次连接到互联网的时间。
有什么想法可以做到这一点吗?可能只需要指向正确的方向就可以了。
非常感谢。
我其实是Java编程新手,但我一直在跟进我的问题的解决方案,但没有找到适合我情况的,并且我似乎无法正确地编写代码。
我想要一个WebView
,当手机联网时打开在线网页(例如Google),并在手机离线时打开本地HTML页面。
同时,当手机在线时,我希望它覆盖本地页面,以便离线本地页面始终更新为上次连接到互联网的时间。
有什么想法可以做到这一点吗?可能只需要指向正确的方向就可以了。
非常感谢。
听起来对我来说是一个简单的Webview缓存机制。
以下内容应该能够满足你的需求:
WebView webView = new WebView( context );
webView.getSettings().setAppCacheMaxSize( 5 * 1024 * 1024 ); // 5MB
webView.getSettings().setAppCachePath( getApplicationContext().getCacheDir().getAbsolutePath() );
webView.getSettings().setAllowFileAccess( true );
webView.getSettings().setAppCacheEnabled( true );
webView.getSettings().setJavaScriptEnabled( true );
webView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT ); // load online by default
if ( !isNetworkAvailable() ) { // loading offline
webView.getSettings().setCacheMode( WebSettings.LOAD_CACHE_ELSE_NETWORK );
}
webView.loadUrl( "http://www.google.com" );
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"/>
有时候 WebView 无法本地缓存。如果页面头包含以下字段,则 WebView 将无法缓存该页面的内容。Cache-Control: no-store, no-cache Pragma: no-cache
在这种情况下,您必须修改服务器上的页面属性以解决缓存问题。
.setAppCacheMaxSize()
这个东西在API18中已经过时了,不确定如何添加更多的缓存... - Luis A. Florit