75

我实际上是使用 Java 编程的新手,但我一直在关注我的问题的几种解决方案,但没有找到适合我的情况的解决方案,而且我似乎无法正确获取代码。

我想要一个WebView在手机在线时打开一个在线页面(例如谷歌)并在手机离线时打开一个本地 HTML 页面。

同时,虽然我希望手机在在线时覆盖本地页面,以便离线本地页面始终更新到手机最后一次连接到互联网时。

关于如何做到这一点的任何想法?一些简单的指向正确方向可能会有所帮助。

非常感谢。

4

2 回答 2

132

对我来说,这听起来像是一个简单的 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"/>
于 2013-02-03T09:53:07.260 回答
23

以下是 WebView 无法本地缓存的情况。如果页面标题包含以下字段,WebView 将无法缓存该页面的内容。Cache-Control: no-store, no-cache Pragma: no-cache

在这种情况下,您将不得不修改服务器上的页面属性来解决缓存问题。

于 2013-05-23T18:53:44.813 回答