Android WebView联机时加载网站,脱机时加载本地文件

Android WebView联机时加载网站,脱机时加载本地文件,android,webview,local,offline,auto-update,Android,Webview,Local,Offline,Auto Update,实际上,我对Java编程还不熟悉,但我一直在遵循几个解决方案来解决我的问题,但没有找到一个适合我的情况,而且我似乎无法正确地编写代码 我想要一个WebView,当手机在线时打开一个在线页面(例如谷歌),当手机离线时打开一个本地HTML页面 同时,我希望手机在联机时覆盖本地页面,以便脱机本地页面始终更新到手机上次连接到internet时 关于如何做到这一点有什么想法吗? 简单地指出正确的方向可能会有所帮助 非常感谢。这听起来像是一个简单的webview缓存机制 以下内容应满足您的要求: WebVi

实际上,我对Java编程还不熟悉,但我一直在遵循几个解决方案来解决我的问题,但没有找到一个适合我的情况,而且我似乎无法正确地编写代码

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

同时,我希望手机在联机时覆盖本地页面,以便脱机本地页面始终更新到手机上次连接到internet时

关于如何做到这一点有什么想法吗? 简单地指出正确的方向可能会有所帮助


非常感谢。

这听起来像是一个简单的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将无法缓存该页面的内容。缓存控制:无存储,无缓存Pragma:无缓存


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

这真的完成了。。工作起来很有魅力!非常感谢你给我看缓存mode@jenzz当前位置我对你的解决方案有两个问题。首先,在我的例子中,cache dir(外部sd卡)中显示的是一个名为
ApplicationCache.db
的空文件。不应该更大吗??可能缓存存储在其他地方?第二,API18中不推荐使用
.setAppCacheMaxSize()
这个东西,不确定如何添加更多的chache,那么…将来配额将自动管理。对我来说,这听起来像是一个简单的webview缓存机制。“thug life 8)在离线模式下关闭并再次加载应用程序时对我不起作用。干得不错+1