【问题标题】:Android - Check Internet AccessAndroid - 检查互联网访问
【发布时间】:2016-09-10 15:19:27
【问题描述】:

我已阅读此关于在 Android 中获取 Internet 连接状态的答案:

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

但是它不能正常工作,例如如果我有一个没有互联网访问的网络连接,这个方法需要很长时间才能返回 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;
}

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

【问题讨论】:

    标签: java android


    【解决方案1】:

    你可以检查是否有连接

    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null &&
                          activeNetwork.isConnectedOrConnecting();
    

    这肯定是一种更快的方法来确定是否有网络访问,而不是执行请求并等待失败。

    也请参阅docs

    【讨论】:

    • 但这并不能告诉你是否可以上网
    【解决方案2】:

    如果您想检查互联网是否存在,此代码可能会对您有所帮助

    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" />
    

    【讨论】:

      【解决方案3】:

      使用此代码:

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

      【讨论】:

      • 这工作完美!谢谢伊朗人:)
      • 坦克 Alireza.pir :)。
      猜你喜欢
      • 2015-11-12
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多