web-dev-qa-db-ja.com

WebViewはオンライン時にWebサイトを読み込み、オフライン時にローカルファイルを読み込みます

私は実際にはJava 。

電話がオンラインのときにオンラインページ(Googleなど)を開き、電話がオフラインのときにローカルHTMLページを開くWebViewが必要です。

同時に、携帯電話がオンラインのときにローカルページを上書きして、携帯電話がインターネットに最後に接続されたときにオフラインのローカルページが常に更新されるようにします。

これをどのように行うかについてのアイデアはありますか?正しい方向を指す簡単な指示が役立つ場合があります。

どうもありがとう。

69
mstation

それは、私にとって単純な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();
}
_

最後に、次の3つのアクセス許可を_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"/>
_
119
jenzz

webViewをネイティブにキャッシュできない場合があります。ページヘッダーに次のフィールドが含まれている場合、WebViewはそのページのコンテンツをキャッシュできません。 Cache-Control:no-store、no-cacheプラグマ:no-cache

この場合、サーバーのページプロパティを変更して、キャッシュの問題を解決する必要があります。

18
Jeppe Leth

私はこれが古い投稿であることを知っていますが、私がやろうとしていることにはちょっと似ています。

ホームオートメーションを制御するWebビューがあります。現時点では、メタ更新を使用して、ページは5分ごとに更新されます。

問題は、モバイル信号がないときにエラーページが表示されるだけなので、アプリを終了して再度開く必要があることです。

これは、1つのこととは別に機能するように見えます。キャッシュされたバージョンのページを使用し、電話がオフラインのときにボタンを押して加熱温度を上げると、どうなりますか?オンラインになってから送信するまで、アクションを保持しますか?それとも、それはすべて同期していないでしょうか?

後者の場合、これを克服する方法はありますか?

0
AndyJ