Cómo cargar o recuperar una página web en modo en línea y fuera de línea en la aplicación android?
Necesito cargar y recuperar una página web HTML en la memoria interna o externa del dispositivo android. Lo que necesito es descargar y recuperar una página web en android usando la vista web.
Hay muchas preguntas repetidas similares a descargar o guardar la página web. Pero ninguna de las respuestas me ayudó. ¡Guíame!
- Inyectar CSS a un sitio con webview en android
- Android: el contenido de Flash rompe los límites de WebView y superpone elementos de diseño nativos
- Fuente personalizada para webview android
- Cómo cargar una imagen almacenada en una matriz de bytes a WebView?
- Android Wikipedia La búsqueda de artículos no aparece correctamente en mi webview?
Gracias por adelantado.
- Android WebView transparente en la parte superior de VideoView
- Cómo mostrar un WebView con Theme.Dialog estilo en Android
- cargando archivos flash (.swf) webview en android
- ¿Cómo implementar pull down refresh en android?
- WebView Atrás, Actualizar, Reenviar? Simplemente no funciona!
- ¿Cómo descargar archivos de Android de vista web?
- ¿Cómo escribes y usas correctamente una subclase View en Android?
- Webview no cambia el tamaño cuando aparece el teclado
No sé es esta solución adecuada para your.if que desea ver un sitio web en mod sin conexión y mod en línea puede utilizar un rastreador web para obtener todos los datos del sitio web. Aquí hay un ejemplo de proyecto para android web crawler.after que usted puede cargar un sitio web de url o memoria local basado en su disponibilidad de Internet.
Obtener el código HTML de WebView cargado
Guardar cadena como archivo html android
Con el enlace de arriba dos puede lograr su requisito, puede almacenar contenido html en el archivo y luego almacenar en el almacenamiento interno, entonces usted puede cargar en modo fuera de línea.
Un WebView
puede cargar y renderizar páginas HTML y local
remote
, además de soportar 'data' scheme URL
.
Opciones de almacenamiento
Preferencias compartidas (no es útil en su caso)
Almacene datos primitivos privados en pares clave-valor.
Almacenamiento interno (recomendado para su caso)
Almacenar datos privados en la memoria del dispositivo.
Almacenamiento externo ( puede utilizar en su caso, pero no se recomienda)
Almacene los datos públicos en el almacenamiento externo compartido.
Bases de datos SQLite (Puede utilizar en su caso, pero no se recomienda)
Almacenar datos estructurados en una base de datos privada.
Conexión de red (Puede utilizar en su caso, pero no funcionará en modo sin conexión)
Almacene datos en la web con su propio servidor de red.
Es posible que desee intentar utilizar el método WebViewClient
de WebViewClient
que utilice set a su WebView
. Le permite conocer todos los recursos que se cargan durante el proceso de carga html. Así que usted puede hacer algo como esto:
WebViewClient webViewClient = new WebViewClient() { @TargetApi(VERSION_CODES.LOLLIPOP) @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { WebResourceResponse response = null; if ("GET".equals(request.getMethod())) { try { response = getWebResponse(view.getContext().getApplicationContext(), request.getUrl().toString()); } catch (Exception e) { Log.e(TAG, "Error while overriding getting web response", e); } } return response; } @SuppressWarnings("deprecation") @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { WebResourceResponse response = null; try { response = getWebResponse(view.getContext().getApplicationContext(), url); } catch (Exception e) { Log.e(TAG, "Error while overriding getting web response", e); } return response; } WebResourceResponse getWebResponse(Context context, String url) { // YOUR IMPLEMENTATION that will save resource located at passed url } } webView.setWebViewClient(webViewClient);
Eso suena como un simple mecanismo de almacenamiento en caché webview para mí.
prueba esto
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 ); }
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(); }
WebView.loadUrl (" http://www.google.com ");
Por último, no olvide añadir 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"/>
Guardar la página web en la memoria caché;
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
Compruebe este enlace WebView cargue el sitio web cuando esté en línea, cargue el archivo local cuando esté fuera de línea
- Firebase 2.0 – cómo hacer frente a múltiples sabores (entornos) de una aplicación para Android?
- Visual studio (2015) emulador para android no funciona – XDE.exe – Código de salida 10