Android Compruebe si hay WiFi pero no Internet

Estoy escribiendo un programa donde necesito comprobar tres estados: 1. Si no tengo WiFi, 2. si tengo WiFi pero no tengo conexión a internet (como si enciendo mi enrutador pero desconecto el cable Ethernet), y 3. si Tengo WiFi y conexión a Internet. Entonces cambiaría el color de un icono en mi aplicación para representar uno de estos estados (rojo, amarillo o verde). Actualmente la condición 2 no funciona, siempre que desenchufe el cable de mi enrutador para probarlo, el color del icono cambia de verde a rojo.

public static void doPing(Context context) { String googleUrl = "https://www.google.com"; ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); try { HttpParams httpParameters = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParameters, TIMEOUT_CONNECTION); HttpConnectionParams.setSoTimeout(httpParameters, TIMEOUT_SOCKET); HttpClient client = new DefaultHttpClient(httpParameters); if (L) Log.i(TAG, "Calling: " + url ); HttpGet getGoogle = getHttpGet(googleUrl); HttpResponse responseGoogle = client.execute(getGoogle); if (responseGoogle != null){ connectionIconView.setIcon(R.drawable.green_wifi); } else if (cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null){ connectionIconView.setIcon(R.drawable.yellow_wifi); } else { connectionIconView.setIcon(R.drawable.red_wifi); } } catch(Exception e) { if (L) Log.e(TAG, "Error during HTTP call"); e.printStackTrace(); } 

Compruebe si el wifi está disponible como este

Función 1

 private boolean isWifiAvailable() { ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return wifi.isConnected(); } 

Después de esto, compruebe como esto si el Internet está disponible

Función 2

  public static boolean isInternetAccessible(Context context) { if (isWifiAvailable()) { try { HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection()); urlc.setRequestProperty("User-Agent", "Test"); urlc.setRequestProperty("Connection", "close"); urlc.setConnectTimeout(1500); urlc.connect(); return (urlc.getResponseCode() == 200); } catch (IOException e) { Log.e(LOG_TAG, "Couldn't check internet connection", e); } } else { Log.d(LOG_TAG, "Internet not available!"); } return false; } 

Condiciones

  1. Si la function 1 devuelve false -> cambia el color a ROJO
  2. Si la function 1 devuelve verdadero y la function 2 devuelve false -> cambia el color a AMARILLO
  3. Si ambas funciones devuelven true -> cambiar el color a VERDE
  • ¿Podemos conectar más de 10 dispositivos con wi-fi hot-spot en Android
  • ¿Los dispositivos Android exploran * activamente * para redes WiFi?
  • Reiniciar en modo TCP puerto 5555 se bloquea adb
  • ¿Cómo me conecto a una red Wi-Fi específica en Android mediante programación?
  • Detectar Si no hay conexión a Internet
  • Android Lollipop preestablece datos móviles cuando Wi-Fi no tiene acceso a Internet?
  • Compartir imágenes desde un dispositivo Android a otro a través de WiFi
  • Obtener la intensidad de la señal de WIFI y datos móviles
  • Solucionar 'la aplicación ha detenido' los errores de error
  • No se puede conectar a un Wifi específico mediante programación en Android
  • Cómo ejecutar wifi peer to peer aplicación en el emulador de Android ..?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.