如何检查我的Android设备是否有活动连接?

时间:2016-08-25 10:51:52

标签: android

对于下述情况,最佳解决方案是用户是否具有有效的互联网连接(通过激活我的意思是用户可以打开任何网络URl)。

  1. 通过向google.com发出http请求并检查暂存代码,或
  2. HttpURLConnection urlc = (HttpURLConnection)
                            (new URL("http://clients3.google.com/generate_204")
                                    .openConnection());
                    urlc.setRequestProperty("User-Agent", "Android");
                    urlc.setRequestProperty("Connection", "close");
                    urlc.connect();
                    Log.d("reqcode",""+urlc.getResponseCode());
                    return (urlc.getResponseCode() == 204 &&
                            urlc.getContentLength() == 0);
    
    1. 向我正在使用的服务器发出请求。
    2. 并且在性能方面最佳。

3 个答案:

答案 0 :(得分:1)

使用这样的方法:

private boolean isNetworkAvailable() {
       ConnectivityManager connectivityManager
                 = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
       NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
       return activeNetworkInfo != null && activeNetworkInfo.isConnected();
     }

然后只是:

if(isNetworkAvailable()) {
    //Do what you want with internet
} else {
    //Do something wothout internet
}

您还需要在清单文件中添加:

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

无论如何:Question

答案 1 :(得分:0)

我使用以下方法检查用户是否通过移动数据或Wi-Fi进行了有效的互联网连接。

public static boolean isInternetConnected() {
        ConnectivityManager connectivityManager = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivityManager != null) {
            NetworkInfo[] info = connectivityManager.getAllNetworkInfo();
            if (info != null) {
                for (int i = 0; i < info.length; i++) {
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                        return true;
                    }
                }
            }  
        }
        return false;
    }

并在清单文件中添加权限。

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

  

无法确定用户是否有活动连接。如果用户没有活动连接,您在问题中建议的方法将导致您等待很长时间,并在一段时间后抛出SocketTimeOutException

因此,如果您想检查用户是否有互联网连接,那么只检查它是否启用了Wi-Fi和/或数据连接,并假设数据包已打开。

答案 2 :(得分:0)

请勿ping网站以检查互联网连接。这是一个非常糟糕的做法,因为该网站可以永久阻止您的应用程序,或者只是一台服务器可能已关闭。

而是使用here来监听互联网连接Intent。从BradcastReceiveronReceive使用

中扩展您的课程
private boolean isConnectedToInternet(){
    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;
}

检查连接状态。

您可能还希望使用

Activity的{​​{1}}和onResume()方法中注册和取消注册接收方
onPause()