2012-07-30 9 views
5

ich einen Code haben, um zu bestimmen, ob es eine Netzwerkverbindung besteht oder nicht:Wenn es keine Internet-Verbindung ist

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 

    if (netInfo != null && netInfo.isConnected()) 
    { 
     // There is an internet connection 
    } 

Aber wenn es eine Netzwerkverbindung und kein Internet ist dies nutzlos. Ich muss eine Website ping und auf eine Antwort oder Timeout warten, um die Internetverbindung zu ermitteln:

URL sourceUrl; 
    try { 
     sourceUrl = new URL("http://www.google.com"); 
     URLConnection Connection = sourceUrl.openConnection(); 
     Connection.setConnectTimeout(500); 
     Connection.connect(); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

     // no Internet 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

     // no Internet 
    } 

Aber es ist eine langsame Erkennung. Ich sollte einen guten und schnellen Weg finden, es zu erkennen.

Vielen Dank im Voraus.

+0

Es bedeutet, dass Sie auch WIFI verwenden. Habe ich recht??? –

+0

Ja, ich benutze nur Wifi. –

+0

Was ist das Problem? –

Antwort

2

Versuchen folgende Methode andere Art von Verbindung zu erkennen:

private boolean haveNetworkConnection(Context context) 
{ 
    boolean haveConnectedWifi = false; 
    boolean haveConnectedMobile = false; 

    ConnectivityManager cm = (ConnectivityManager) Your_Activity_Name.this.getSystemService(Context.CONNECTIVITY_SERVICE); 
    // or if function is out side of your Activity then you need context of your Activity 
    // and code will be as following 
    // (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
    for (NetworkInfo ni : netInfo) 
    { 
     if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
     { 
      if (ni.isConnected()) 
      { 
       haveConnectedWifi = true; 
       System.out.println("WIFI CONNECTION AVAILABLE"); 
      } else 
      { 
       System.out.println("WIFI CONNECTION NOT AVAILABLE"); 
      } 
     } 
     if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
     { 
      if (ni.isConnected()) 
      { 
       haveConnectedMobile = true; 
       System.out.println("MOBILE INTERNET CONNECTION AVAILABLE"); 
      } else 
      { 
       System.out.println("MOBILE INTERNET CONNECTION NOT AVAILABLE"); 
      } 
     } 
    } 
    return haveConnectedWifi || haveConnectedMobile; 
} 
+0

Danke Chintan für Ihre Beratung. –

+0

Wussten Sie das? –

+0

nicht wirklich. Ich denke Sanjay hat was ich will. –

1

Das Problem bei allen diesen Systemen ist, dass ‚das Internet‘ nicht als Einheit existiert. Es gibt einen Grund, warum fehlgeschlagene Verbindungsversuche als "nicht erreichbar" oder "Verbindung zum Server bei blahblah" nicht gemeldet werden können. Beispiele:

1) Sie haben kein Signal. Sind Sie mit dem Internet verbunden? Wird PING erfolgreich sein? Können Sie eine Verbindung zu Ihrem Zielserver herstellen?

2) Sie haben ein Signal, aber die Datenübernahme Ihres Providers wurde überschritten. Sind Sie mit dem Internet verbunden? Wird PING erfolgreich sein? Können Sie eine Verbindung zu Ihrem Zielserver herstellen?

3) Ihre Providerverbindung ist in Ordnung, aber ihr Backbone-Router ist ausgefallen. Sind Sie mit dem Internet verbunden? Wird PING erfolgreich sein? Können Sie eine Verbindung zu Ihrem Zielserver herstellen?

4) Ihre Provider-Verbindung ist in Ordnung, ihr Backbone-Router ist hoch, aber die Glasfaserverbindung zu Land X, wo der Server von einem betrunkenen Captain und seinem Schiffsanker unterbrochen wurde. Sind Sie mit dem Internet verbunden? Wird PING erfolgreich sein? Können Sie eine Verbindung zu Ihrem Zielserver herstellen?

5) Alle Verbindungen zum Zielland sind abgelaufen, aber Fred hat mit seinem Graben JCB das Stromkabel zur Serverfarm durchgeschnitten. Eine von Freds anderen Aufgaben besteht darin, den Backup-Generator zu warten :(Sind Sie mit dem Internet verbunden? Wird PING erfolgreich? Können Sie eine Verbindung zu Ihrem Zielserver herstellen?

6) Die gesamte Hardware ist aktiv, aber der Servercode wurde geschrieben von Fred, bevor er degradiert wurde, um nach Inkompetenz zu graben und jetzt wieder abgestürzt ist. Sind Sie mit dem Internet verbunden? Wird PING erfolgreich sein? Können Sie eine Verbindung zu Ihrem Zielserver herstellen?

7) Fred hatte einen freien Tag, aber sein Ersatz, kompetenter Server-Administrator hat ICMP-Ping in den Routern blockiert, um Ping-DOS-Angriffe zu verhindern. Sind Sie mit dem Internet verbunden? Wird PING erfolgreich sein? Können Sie eine Verbindung zu Ihrem Zielserver herstellen?

Also, der einzige Weg, um sicher zu sein, ist zu versuchen, eine Verbindung zum Zielserver herzustellen und zu sehen, was passiert.

Sie können sicher einige negative Fälle schneller erkennen - sicher, wenn es kein Signal gibt, können Sie keine Verbindung bekommen :) Vergangenheit, sollten Sie nur versuchen, eine Verbindung herzustellen. Teilen Sie dem Benutzer mit, was vor sich geht, verwenden Sie eine Zeitüberschreitung und geben Sie dem Benutzer eine 'Abbrechen'-Schaltfläche. Das ist das Beste, was du tun kannst.

+0

Martin Vielen Dank für Ihren Rat. –

1

Wie wäre es damit?

Achten Sie darauf, eine aktive WLAN-Verbindung verfügen, verwenden Sie jetzt WifiManager.getConnectionInfo() die dynamische Informationen über den aktuellen WLAN-Verbindung zurückgibt, WifiInfo Sie WifiInfo.getLinkSpeed() erhalten können, die Sie die aktuelle Verbindungsgeschwindigkeit und prüfen, ob gegen einen minimalen Wert.

+1

Und Sanjay. Ihre Lösung für dieses Problem ist sehr logisch, benötigt aber ein paar experimentelle Schwellenwerte. zum Beispiel für keine Internetverbindung gibt es die Verbindungsgeschwindigkeit 11 und wenn es eine Internetverbindung gibt gibt es 54. Ich bin nicht sicher, ob es für alle Netzwerke in der Welt funktioniert. –

+0

Wenn ich mit verschiedenen Modems versuchte, denke ich, dass es nicht die Lösung auch ist. –

+0

@CodersParadise Das war eine experimentelle Lösung :-) Ich habe das selbst nie versucht. – COD3BOY

Verwandte Themen