我正在构建一个有助于在Android上配置WIFI设置的应用,我需要以最快的方式来检查有效的互联网连接。 工作连接 - 不仅连接了WIFI!
我正在使用此代码
URL url = new URL("http://www.google.com");
final HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestProperty("User-Agent", "Android Application");
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(3 * 1000);
urlc.connect();
if (urlc.getResponseCode() == 200) { // Good response
} else {
//bad
}
} catch (IOException e) {
//bad
}
但是获得响应需要很长时间,大约20秒(即使超时为3秒?)。 有更快的方法吗?
答案 0 :(得分:0)
您的代码看起来很好,如果您还添加了urlc.setReadTimeout(TIME_OUT);
下面是我使用的代码,到目前为止它已经捕获了WiFi /移动连接的各种场景,但没有互联网等等。
public boolean isNetworksAvailable() {
ConnectivityManager mConnMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (mConnMgr != null) {
NetworkInfo[] mNetInfo = mConnMgr.getAllNetworkInfo();
if (mNetInfo != null) {
for (int i = 0; i < mNetInfo.length; i++) {
if (mNetInfo[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
此代码执行的操作是循环通过所有网络状态以确保它找到CONNECTED状态,然后才isNetworksAvailable()
在isInternetConnected
中,我们会检查是否可以建立一个简单的HTTP URL连接。
public boolean isInternetConnected(String mUrl) {
final int CONNECTION_TIMEOUT = 2000;
if (isNetworksAvailable()) {
try {
HttpURLConnection mURLConnection = (HttpURLConnection) (new URL(mUrl).openConnection());
mURLConnection.setRequestProperty("User-Agent", "ConnectionTest");
mURLConnection.setRequestProperty("Connection", "close");
mURLConnection.setConnectTimeout(CONNECTION_TIMEOUT);
mURLConnection.setReadTimeout(CONNECTION_TIMEOUT);
mURLConnection.connect();
return (mURLConnection.getResponseCode() == 200);
} catch (IOException ioe) {
Log.e("isInternetConnected", "Exception occured while checking for Internet connection: ", ioe);
}
} else {
Log.e("isInternetConnected", "Not connected to WiFi/Mobile and no Internet available.");
}
return false;
}
此代码应在AsyncTask中使用,否则您需要将其与以下代码一起使用,例如在onCreate()
中(但强烈建议使用AsyncTask而不是在网络上进行UI线程)
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
测试是否连接到Internet:
if (isInternetConnected("http://www.google.com")) {
showToast("Internet connected");
} else {
showToast("No connection to the Internet!");
}
答案 1 :(得分:-1)
在拨打服务器电话之前,请使用以下方法:
public static boolean isOnline() {
try {
ConnectivityManager cm = (ConnectivityManager) Const.CONTEXT
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
return cm.getActiveNetworkInfo().isConnectedOrConnecting();
} else {
return false;
}
} catch (Exception e) {
return false;
}
}