2011-05-25 21 views
6

Estoy creando una aplicación de Android que, entre otras cosas, muestra sitios web en una vista web. Por lo que yo entiendo, la vista web muestra automáticamente una versión en caché de la página si no se puede establecer una conexión.Averigüe si Android WebView muestra la página en caché

¿Hay alguna forma de averiguar si la página mostrada se ha obtenido del servidor o la memoria caché?

Quizás incluso la antigüedad de la página almacenada en caché.

Esto es para poder notificar al usuario si él/ella está viendo información vieja.

Respuesta

7

Usted podría intentar un truco - en cache mode-WebSettings.NO_CACHE y cargar la URL primer conjunto de WebView. A continuación, cree un WebChromeClient personalizado como este:

final String urlToLoad = "http://www.my-url.com"; 
webview.setWebViewClient(new WebViewClient() { 
    @Override 
    public void onReceivedError(WebView view, int errorCode, 
      String description, String failingUrl) 
    { 
     if (view.getSettings().getCacheMode() == WebSettings.LOAD_NO_CACHE && urlToLoad.equals(failingUrl)) 
     { 
      view.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY); 
      view.loadUrl(urlToLoad); 
      return; 
     } 
     else 
     if (urlToLoad.equals(failingUrl)) 
     { 
      // cache failed as well, load a local resource as last resort 
      // or inform the user 
     } 
     super.onReceivedError(view, errorCode, description, failingUrl); 
    } 
}); 
webview.loadUrl(urlToLoad); 
+0

Esto todavía es un hack. ¿Por qué no hay forma de verificar si existe una memoria caché para una URL determinada? EDITAR: ¿Y por qué Android llama onReceivedError() si existe un caché? – mhenry

0

Dado que WebView funciona como el navegador, la respuesta es no. Hay alguna forma hacky para detectar esa situación.

o una solución alternativa podría estar impidiendo la página de ser cacheada (véase la documentación WebView)

Cuestiones relacionadas