2016-05-14 130 views
2

我看了这个回答关于获得互联网连接状态在安卓Android的 - 检查网络连接

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

但如果我有没有接入Internet的网络连接它不能正常工作,例如,此方法需要很长时间才能返回False:

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; 
} 

如何缩短该时间以获得更快的答案?

回答

1

使用此代码:

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

这工作完美! 谢谢伊朗:) –

+0

坦克Alireza.pir :)。 –

0

你可以检查是否有与

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

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

连接这是肯定的一个更快的方法,以确定是否有网络存取权限,而不是执行请求,并等待故障。

另请参阅docs

+1

但这并不告诉你,如果你有互联网接入或不 – waqaslam

+0

哦,我明白了。也许https://github.com/novoda/merlin是你正在寻找的。 – fiipi

0

,如果你想查询互联网这个代码可以帮助你的存在与否

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; 
} 

,并给予许可,您manifest.xml

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