Prüfen ob Verbindung zur Seite hergestellt werden kann

  • Antworten:5
Android.DEX
  • Forum-Beiträge: 4

04.11.2017, 22:08:58 via Website

Hey,
aus einem früheren Post geht hervor dass ich vor hatte eine Verbindung zum webview herzustellen wenn eine Online-Verbindung besteht.
Bei einer Offline-Verbindung sollte eine Offline-HTML-Seite statt der standart "Error Seite nicht verfügbar" in der App geöffnet werden.
Beides funktioniert bisher komplikationslos.
Nun möchte ich gerne dass die App auf die Offline-Seite weiterleitet wenn während der Benutzung der App das Internet deaktiviert wird oder keine Verbindung zum Internet hergestellt werden kann.

Wie schaffe ich es denn, dass im Hintergrund abgefragt wird ob z.B Google erreichbar ist und entsprechende rückmeldungen wie "erreichbar" und "nicht erreichbar" zurück kommen ohne die App immer neu starten zu müssen?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.11.2017, 02:17:12 via App

Du kannst entweder alle x Sekunden einen Server pingen oder was deutlich besser ist, den Android Network State Listener benutzen: https://stackoverflow.com/questions/25678216/android-internet-connectivity-change-listener

Allerdings stelle ich es mir ziemlich nerfig vor wenn ich in einer App "arbeite" z.b. im Zug und dann ist kurz das Netz weg, schon kommt eine andere Seite und meine "arbeit" ist umsonst.

LG Pascal //It's not a bug, it's a feature. :) ;)

Android.DEX

Antworten
Android.DEX
  • Forum-Beiträge: 4

05.11.2017, 19:54:58 via Website

Danke für die schnelle Antwort.
Keine Sorge. Das ist wohl durchdacht. Größere Arbeiten sind natürlich nicht geplant somit kann auch nicht viel "verloren" gehen. Zumal das Gerät auf der einzig und alleine die App läuft fest an einem Platz umgeben vom WLAN ist. Eigentlich sollte man dann nicht aus dem Netz fliegen aber zufälle passieren und ich will vermeidbares verhindern.

Keine Lust einen Anruf zu bekommen mit der Aussage "XY funktioniert nicht" nur weil Person XY nicht erkennt dass lediglich der Router neustartet oder der Repeater versehentlich aus der Steckdose gezogen wurde. ;)

Btw. ich hab das Problem, wenn die App erfolgreich gestartet ist und der WebView die eigentliche Online-Seite anzeigt, anschließend die Internetverbindung beendet und dann auf ein Submit-Button in einem mit der method "POST" klickt die offline Seite nicht aufgerufen wird stattdessen die standart Seite von Android dass die Website nicht verfügbar ist.

Mein Snipping sieht dann wie folgt aus:

    private class MyBrowser extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if ( !isNetworkAvailable() ) { // loading offline
            view.loadUrl("file:///android_asset/index.html");
        }
        else { // loading online
            view.loadUrl(url);
        }
        return true;
    }
}

Hat zufällig jemand eine Lösung perat?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.11.2017, 20:24:39 via Website

Naja, shouldOverrideUrl wird nur aufgerufen, wenn die URL auch wirklich geladen werden kann.

Bei WebView errors aller art kannst du onReceiveError anzapfen:
https://stackoverflow.com/questions/6552160/prevent-webview-from-displaying-web-page-not-available
Musst aber aufpassen, das gilt nicht nur wenn es keine Verbindung gibt, sonder bei jedlichem error z.b. auch SSL Fehler etc..

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Android.DEX
  • Forum-Beiträge: 4

06.11.2017, 17:26:56 via Website

Es klingt eventuell etwas frech da ich noch absoulter Einsteiger bin aber der von dir gepostete Link zeigt eine Lösung mit veralteten "Techniken"
Die Funktion

onReceivedError()

Wurde gestrichen. Stattdessen ist von Google empfohlen die Funktion

onReceivedHttpAuthRequest()

zu nutzen. Da ich aber - wie bereits erwähnt, blutiger Anfänger auf dieser Thematik bin hoffe ich nun darauf, dass mich jemand unterstützen mag und mir eventuell das Script so anpasst dass es funktioniert.
Unabhängig davon, welche Art von Error von Error auftaucht soll man zu einer lokalen HTML - Seite weitergeleitet werden.. Wenn nicht, dann zu einer Online-Seite...

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.11.2017, 00:09:01 via App

Du bist da in der Api Doc verrutscht:
onReceivedError hat nur neue Parameter, deprecated ist nur der alte Aufruf mit anderen params.

developer.android.com/reference/android/webkit/WebViewClient.html#onReceivedError(android.webkit.WebView, android.webkit.WebResourceRequest, android.webkit.WebResourceError)

LG Pascal //It's not a bug, it's a feature. :) ;)

Ludy

Antworten