wake-up-neo.net

WebView-Website laden, wenn Online, lokale Datei, wenn offline

Ich bin eigentlich neu in der Programmierung in Java, aber ich habe hier mehrere Lösungen für mein Problem verfolgt, aber keine passende gefunden, die zu meinem Fall passt, und ich kann den Code nicht richtig herunterbekommen.

Ich hätte gerne eine WebView, die eine Online-Seite (z. B. Google) öffnet, wenn das Telefon online ist, und eine lokale HTML-Seite, wenn das Telefon offline ist.

Zur gleichen Zeit möchte ich, dass das Telefon die lokale Seite überschreibt, wenn es online ist, so dass die lokale Offline-Seite immer auf das letzte Mal aktualisiert wird, zu dem das Telefon mit dem Internet verbunden war.

Irgendwelche Ideen, wie dies getan werden könnte? Ein einfaches Zeigen in die richtige Richtung kann hilfreich sein.

Danke vielmals.

64
mstation

Das klingt für mich nach einem einfachen Webview-Caching-Mechanismus.

Folgendes sollte das tun, wonach Sie suchen:

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

Die Methode isNetworkAvailable() sucht nach einer aktiven Netzwerkverbindung:

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

Vergessen Sie nicht, Ihrem AndroidManifest.xml die folgenden drei Berechtigungen hinzuzufügen:

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

in einigen Fällen kann ein WebView nicht nativ zwischengespeichert werden. Wenn der Seitenkopf die folgenden Felder enthält, kann der WebView den Inhalt dieser Seite nicht zwischenspeichern. Cache-Control: Kein Speicher, kein Cache. Pragma: Kein Cache

In diesem Fall müssen Sie die Seiteneigenschaft auf dem Server ändern, um das Caching-Problem zu lösen.

17
Jeppe Leth

Ich weiß, dass dies ein alter Beitrag ist, aber es passt irgendwie zu dem, was ich versuche zu tun.

Ich habe eine Webansicht, die einige Dinge der Hausautomation steuert. Momentan wird die Seite nur alle 5 Minuten mit einer Meta-Aktualisierung aktualisiert.

Das Problem ist, dass, wenn es kein mobiles Signal gibt, nur eine Fehlerseite angezeigt wird. Daher muss die App beendet und erneut geöffnet werden.

Es sieht so aus, als könnte es von einer Sache abgesehen funktionieren. Wenn ich eine zwischengespeicherte Version der Seite verwende und die Taste drücke, um die Heiztemperatur zu erhöhen, während das Telefon offline ist, was passiert dann? Wird es die Aktion behalten, bis sie online geht und sie dann sendet? Oder wäre es dann nicht mehr synchron?

Wenn letzteres, gibt es eine Möglichkeit, dies zu überwinden?

0
AndyJ