簡體   English   中英

Android - 檢查互聯網訪問

[英]Android - Check Internet Access

我已閱讀有關在 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;
}

我怎樣才能減少這個時間以獲得更快的答案?

使用此代碼:

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

您可以檢查是否與

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

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

這肯定是一種更快的方法來確定是否有網絡訪問,而不是執行請求並等待失敗。

也請參閱文檔

如果您想檢查互聯網是否存在,此代碼可能對您有所幫助

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM