2016-05-14 11 views
2

ich diese Antwort in Android über Inernet Verbindungsstatus gelesen habe:Android - Überprüfen Internetzugang

https://stackoverflow.com/a/22256277/4225644

aber es funktioniert nicht richtig, zum Beispiel, wenn ich eine Netzwerkverbindung ohne Internetzugang , dauert diese Methode zu lange Zeit, um False zurückzugeben:

public Boolean isOnline() { 
try { 
    Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com"); 
    int returnVal = p1.waitFor(); 
    boolean reachable = (returnVal==0); 
    return reachable; 
} catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
return false; 
} 

Wie kann ich diese Zeit verringern, um eine schnellere Antwort zu haben?

Antwort

1

Verwendung geben:

public static boolean isInternetConnected(Context context) { 
    ConnectivityManager cm = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 

    NetworkInfo ni = cm.getActiveNetworkInfo(); 

    if (ni == null) 
     return false; 
    else { 
     if (ni.isConnected()) 
      if (isOnline(context)) 
       return true; 
      else 
       return false; 
     return false; 
    } 
} 


public static boolean isOnline(Context context) { 
    ConnectivityManager cm = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnected()) { 
     try { 
      URL url = new URL("http://www.google.com"); 
      HttpURLConnection urlc = (HttpURLConnection) url 
        .openConnection(); 
      urlc.setConnectTimeout(2000); 
      urlc.connect(); 
      if (urlc.getResponseCode() == 200) { 
       return new Boolean(true); 
      } 
     } catch (MalformedURLException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    return false; 
} 
+0

das funktionierte perfekt! Danke iranisch :) –

+0

Tanks Alireza.pir :). –

0

Sie überprüfen könnten, ob es Konnektivität mit

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

NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
boolean isConnected = activeNetwork != null && 
         activeNetwork.isConnectedOrConnecting(); 

ist sicher ein schneller Weg ist, um zu bestimmen, ob es Netzwerk ist acces stattdessen eine Anforderung der Durchführung und für einen Fehler warten.

Siehe auch docs.

+1

aber das sagt Ihnen nicht, ob Sie einen Internetzugang haben oder nicht – waqaslam

+0

Oh, ich verstehe. Vielleicht https://github.com/novoda/merlin ist was du suchst. – fiipi

0

dieser Code Sie werden helfen, wenn Sie Internet überprüfen möchten vorhanden ist oder nicht

public boolean isConnectingToInternet(){ 
    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++) 
      if (info[i].getState() == NetworkInfo.State.CONNECTED) 
      { 
       return true; 
      } 

    } 
    return false; 
} 

und die Erlaubnis, diesen Code in Ihre manifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 
Verwandte Themen