2012-04-17 8 views
7

Meine App lädt zuerst die Daten aus dem Internet (ich benutze Webservice) Ich möchte den Internetzugang beim Start der App überprüfen.Wie überprüft man, ob Internet in App-Startup in Android verfügbar ist oder nicht?

  1. Ich möchte überprüfen, ob irgendwelche Formen von Internet entweder 3G oder WIFI oder GPRS oder andere verfügbar ist oder nicht.
  2. Wenn nicht verfügbar, geben Sie dem Benutzer eine Nachricht wie "Sie benötigen Internet-Zugang" und beenden Sie die App. (Momentan bekomme ich Force Close Fehler in meiner App, wenn es keinen Internetzugang gibt)
  3. Falls verfügbar, starte meine App normal.
  4. Auch meine app holt die daten von webservice in verschiedenen phasen, vor jeder phase oder operation, ich werde gerne überprüfen internet-zugang zuerst.

Wie mache ich das?

+2

Siehe z http://stackoverflow.com/questions/1560788/how-to-check-internet-access-on-android-inetaddress-never-timeouts für vorherige Antworten. – mlc

Antwort

7

Sie meine Methode verwenden können:

public static boolean isNetworkAvailable(Context context) 
{ 
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

    if (connectivity != null) 
    { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 

     if (info != null) 
     { 
      for (int i = 0; i < info.length; i++) 
      { 
       Log.i("Class", info[i].getState().toString()); 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) 
       { 
        return true; 
       } 
      } 
     } 
    } 
    return false; 
} 
+0

Danke! funktioniert !!! – captaindroid

+0

ich bin froh, dass es Ihnen hilft .. :) – dreamcoder

+0

wenn ich wifi ohne funktionierende Internetverbindung verbunden habe, dann ist der Code wahr. Hast du irgendwelche Alternativen dafür? –

3

Sie können all dies mit ConnectivityManager tun. Alle erforderlichen Informationen finden Sie hier

http://developer.android.com/reference/android/net/ConnectivityManager.html

Sie wollen wahrscheinlich so etwas wie dies in der onStart() Methode Ihrer Anfangsaktivität bleiben (je nachdem, wo in Ihrem Code die Verbindung ausgelöst wird und die Daten heruntergeladen werden)

ConnectivityManager cm = (ConnectivityManager) Context.getSystemService(Context.CONNECTIVITY_SERVICE); 

if (cm.getAllNetworkInfo().isConnected()) { 
//proceed with loading 
} else { 
//showErrorDialog 
} 

ich habe nicht te Code getestet, so das Ausschneiden und Einfügen ist wahrscheinlich eine schlechte Idee, aber das sollten Sie einen guten Ausgangspunkt. Es gibt viele andere Informationen, wenn Sie die Dokumente überprüfen.

Es könnte auch eine Idee sein, den Mangel an Konnektivität zu beheben, indem Sie Ihren Code ändern, damit er nicht einfach abstürzt, wenn keine Verbindung besteht, bevor ein Standard-Ladebildschirm angezeigt wird? Auch wenn eine Verbindung verfügbar ist, kann es vorkommen, dass Ihre App keine Daten erhält. Daher sollten Sie auch dieses Szenario behandeln.

1
NetworkInfo i = conMgr.getActiveNetworkInfo(); 
    if (i == null) 
    return false; 
    if (!i.isConnected()) 
    return false; 
    if (!i.isAvailable()) 
    return false; 
    return true;