WebView carga el sitio web cuando está en línea, carga el archivo local cuando está desconectado

En realidad, soy nuevo en la progtwigción en Java, pero he estado siguiendo varias soluciones a mi problema aquí, pero no encontré uno que se adapte a mi caso y parece que no puedo obtener el código correctamente.

Me gustaría tener un WebView que abra una página en línea (por ejemplo, Google) cuando el teléfono esté en línea y abra una página HTML local cuando el teléfono esté desconectado.

Al mismo tiempo, quiero que el teléfono sobrescriba la página local cuando está en línea para que la página local fuera de línea siempre se actualice a la última vez que el teléfono estuvo conectado a Internet.

¿Alguna idea sobre cómo esto podría hacerse? Un simple señalar en la dirección correcta podría ayudar.

Muchas gracias.

Eso suena como un simple mecanismo de caché de vista web para mí.

Los siguientes deben hacer lo que estás buscando:

 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" ); 

El método isNetworkAvailable() comprueba si hay una conexión de red activa:

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

Finalmente, no olvide agregar los siguientes tres permisos a su AndroidManifest.xml :

    

Aquí hay ocasiones en que un WebView no se puede almacenar en caché de forma nativa. Si el encabezado de la página contiene los siguientes campos, WebView no podrá almacenar en caché los contenidos de esa página. Cache-Control: no-store, no-cache Pragma: no-cache

En este caso, tendrá que modificar la propiedad de la página en el servidor para resolver el problema del almacenamiento en caché.