WebView在线加载网站,离线时加载本地文件

mst*_*ion 71 android offline local auto-update webview

我实际上是Java编程的新手,但是我一直在关注我的问题的几个解决方案,但没有找到一个适合我的情况,我似乎无法正确地解决代码.

我希望WebView手机在线时打开一个在线页面(例如Google),并在手机离线时打开本地HTML页面.

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

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

非常感谢.

jen*_*nzz 122

这听起来像是一个简单的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" );
Run Code Online (Sandbox Code Playgroud)

该方法isNetworkAvailable()检查活动网络连接:

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService( CONNECTIVITY_SERVICE );
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
Run Code Online (Sandbox Code Playgroud)

最后,不要忘记将以下三个权限添加到您的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"/>
Run Code Online (Sandbox Code Playgroud)

  • "这听起来像是一个简单的webview缓存机制." 暴徒生活8) (5认同)
  • 当应用程序被杀死并在离线模式下再次加载时,它对我不起作用。干得好 +1 (3认同)
  • 这真的很完整。非常感谢您向我展示缓存模式 (2认同)

小智 19

这是WebView无法本机缓存的情况.如果页眉包含以下字段,则WebView将无法缓存该页面中的内容.Cache-Control:no-store,no-cache Pragma:no-cache

在这种情况下,您必须修改服务器上的页面属性以解决缓存问题.