Your code looks fine, perhaps it would work better if you also added urlc.setReadTimeout(TIME_OUT);
Ниже приведен код, который я использую, и он до сих пор обнаружил различные сценарии подключения WiFi/Mobile, но не Интернет и так далее.
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;
}
What this code does is loop thru all the Network states to make sure it finds a CONNECTED state, only then is isNetworksAvailable()
В isInternetConnected
мы проверяем, можем ли мы сделать простую HTTP-связь.
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 вместо создания сети в потоке пользовательского интерфейса)
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!");
}