您的代码看起来不错,也许会更好地工作,如果还添加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;
}
这段代码的作用是环通所有的网络状态,以确保找到一个连接状态,只有这样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()
用下面的代码使用它,例如(但强烈推荐使用的,而不是做UI线程联网的的AsyncTask)如果
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
测试连接到互联网:
if (isInternetConnected("http://www.google.com")) {
showToast("Internet connected");
} else {
showToast("No connection to the Internet!");
}
转到这个http://stackoverflow.com/questions/12889750/how-to-find-network-enable-status-in-android/128900 37#12890037 –
@ user1591982我的回答有帮助吗? – kaderud
不,对不起。同样的结果。但非常感谢你的答案! – user1591982