在线时WebView加载网站,离线时加载本地文件
我实际上是在Java编程新手,但我一直在解决我的问题的几个解决scheme,但没有find一个适合我的情况下,我似乎无法得到正确的代码。
我想有一个WebView
,当手机在线时打开在线页面(例如Google),当手机处于离线状态时打开本地HTML页面。
同时,尽pipe我希望手机在联机时覆盖本地页面,以便离线本地页面始终更新到最后一次手机连接到互联网。
任何想法如何做到这一点? 一些简单的指向正确的方向可能会有所帮助。
非常感谢。
这听起来像一个简单的webviewcaching机制给我。
以下应该做你正在寻找的东西:
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()
检查一个活动的networking连接:
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不能被本地caching的场合。 如果页眉包含以下字段,则WebView将无法caching该页面中的内容。 caching控制:无存储,无cachingPragma:无caching
在这种情况下,您将不得不修改服务器上的页面属性来解决caching问题。