1. ホーム
  2. android

WebView オンライン時はウェブサイトを読み込み、オフライン時はローカルファイルを読み込む。

2023-11-01 23:56:19

質問

私は実はJavaでのプログラミングは初めてなのですが、ここで私の問題に対するいくつかの解決策を追ってみましたが、私のケースに合うものが見つからず、コードを正しく書き留めることができないようです。

私は WebView を使用して、電話がオンラインのときはオンラインページ (たとえば Google) を開き、電話がオフラインのときはローカルの HTML ページを開くようにしたいです。

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

これをどのように行うかについて何かアイデアはありますか? 正しい方向へのいくつかの簡単なポインティングがあれば助かります。

どうもありがとうございます。

どのように解決するのですか?

私には単純なウェブビューのキャッシュ機構のように聞こえます。

以下は、あなたが探しているものを行う必要があります。

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"/>