programacion - manual de android en pdf
WebView carga el sitio web cuando está en línea, carga el archivo local cuando está desconectado (2)
En realidad, soy nuevo en la programació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.
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é.
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
:
<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"/>