Compruebe la conexión a Internet activa Android

OK, por lo que estoy tratando de escribir una parte en mi aplicación que diferencie entre una conexión activa Wifi y una conexión real a Internet. Averiguar si hay una conexión Wifi activa es bastante sencillo con el administrador de conexión sin embargo cada vez que intento probar si puedo conectar a un sitio web cuando el Wifi está conectado, pero no hay conexión a Internet termino en un bucle infinito.
He intentado hacer ping a google sin embargo esto termina de la misma manera:

Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com"); int returnVal = 5; try { returnVal = p1.waitFor(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } boolean reachable = (returnVal==0); return reachable; 

También intenté este código:

 if (InetAddress.getByName("www.xy.com").isReachable(timeout)) { } else { } 

Pero no pude obtener isReachable para trabajar. ¡Muchas gracias por tu ayuda!

6 Solutions collect form web for “Compruebe la conexión a Internet activa Android”

Funciona para mí:

Para verificar la disponibilidad de la red:

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

Para verificar el acceso a Internet:

 public Boolean isOnline() { try { Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com"); int returnVal = p1.waitFor(); boolean reachable = (returnVal==0); return reachable; } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } 

Yo uso esto:

 public static void isNetworkAvailable(Context context){ HttpGet httpGet = new HttpGet("http://www.google.com"); HttpParams httpParameters = new BasicHttpParams(); // Set the timeout in milliseconds until a connection is established. // The default value is zero, that means the timeout is not used. int timeoutConnection = 3000; HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); // Set the default socket timeout (SO_TIMEOUT) // in milliseconds which is the timeout for waiting for data. int timeoutSocket = 5000; HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters); try{ Log.d(TAG, "Checking network connection..."); httpClient.execute(httpGet); Log.d(TAG, "Connection OK"); return; } catch(ClientProtocolException e){ e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } Log.d(TAG, "Connection unavailable"); } 

Viene de otra respuesta de stackoverflow, pero no la encuentro.

EDITAR:

Finalmente lo encontré: https://stackoverflow.com/a/1565243/2198638

Para comprobar si el dispositivo Android tiene una conexión activa, utilizo este método hasActiveInternetConnection () debajo de (1) intenta detectar si la red está disponible y (2) luego conectar a google.com para determinar si la red está activa.

 public static boolean hasActiveInternetConnection(Context context) { if (isNetworkAvailable(context)) { if (connectGoogle()) { return true; } else {//one more try return connectGoogle(); } } else { log("No network available! (in hasActiveInternetConnection())"); return false; } } public static boolean isNetworkAvailable(Context ct) { ConnectivityManager connectivityManager = (ConnectivityManager)ct.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null; } public static boolean connectGoogle() { try { HttpURLConnection urlc = (HttpURLConnection)(new URL("http://www.google.com").openConnection()); urlc.setRequestProperty("User-Agent", "Test"); urlc.setRequestProperty("Connection", "close"); urlc.setConnectTimeout(10000); urlc.connect(); return (urlc.getResponseCode() == 200); } catch (IOException e) { log("IOException in connectGoogle())"); return false; } } 

Aquí está un código moderno que utiliza un AsynTask para evitar un problema en el que Android se bloquea cuando intenta conectarse en el hilo principal e introduce una alerta con una opción de enjuague y repetición para el usuario.

 class TestInternet extends AsyncTask<Void, Void, Boolean> { @Override protected Boolean doInBackground(Void... params) { try { URL url = new URL("http://www.google.com"); HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); urlc.setConnectTimeout(3000); urlc.connect(); if (urlc.getResponseCode() == 200) { return true; } } catch (MalformedURLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); return false; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } return false; } @Override protected void onPostExecute(Boolean result) { if (!result) { // code if not connected AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage("An internet connection is required."); builder.setCancelable(false); builder.setPositiveButton( "TRY AGAIN", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); new TestInternet().execute(); } }); AlertDialog alert11 = builder.create(); alert11.show(); } else { // code if connected doMyStuff(); } } } 

 new TestInternet().execute(); 

Consultar un sitio web como este:

Haz que tu clase implemente AsyncTaskCompleteListenere<Boolean> añadiendo el siguiente método a tu clase:

 @Override public void onTaskComplete(Boolean result) { Toast.makeText(getApplicationContext(), "URL Exist:" + result, Toast.LENGTH_LONG).show(); // continue your job } 

Agregue un método testConnection simple a su clase para que se le llame cuando desee comprobar su conectividad:

 public void testConnection() { URLExistAsyncTask task = new URLExistAsyncTask(this); String URL = "http://www.google.com"; task.execute(new String[]{URL}); } 

Y finalmente, la clase URLExistAsyncTask que realiza la prueba de conectividad como una tarea asincrónica (de fondo) y llama de vuelta al método onTaskComplete una vez hecho:

  public class URLExistAsyncTask extends AsyncTask<String, Void, Boolean> { AsyncTaskCompleteListenere<Boolean> callback; public URLExistAsyncTask(AsyncTaskCompleteListenere<Boolean> callback) { this.callback = callback; } protected Boolean doInBackground(String... params) { int code = 0; try { URL u = new URL(params[0]); HttpURLConnection huc = (HttpURLConnection) u.openConnection(); huc.setRequestMethod("GET"); huc.connect(); code = huc.getResponseCode(); } catch (IOException e) { return false; } catch (Exception e) { return false; } return code == 200; } protected void onPostExecute(Boolean result){ callback.onTaskComplete(result); } } 

Utilicé este método. Funcionó para mí! Para las personas que quieren obtener el Internet real!

 public boolean isOnline() { try { HttpURLConnection httpURLConnection = (HttpURLConnection)(new URL("http://www.google.com").openConnection()); httpURLConnection.setRequestProperty("User-Agent", "Test"); httpURLConnection.setRequestProperty("Connection", "close"); httpURLConnection.setConnectTimeout(10000); httpURLConnection.connect(); return (httpURLConnection.getResponseCode() == 200); } catch (IOException e) { e.printStackTrace(); return false; } } 

Para hacer este método cada vez! Solo usa un receptor y =>

 httpURLConnection.getResponseCode() == 200 

¡Esto significa que Internet está conectado!

  • Android tethering, cómo deshabilitar dhcp
  • Cómo escribir un Android SocketServer para escuchar en wifi
  • Android 6.0 comprueba si está conectado a una red Wi-Fi (sin Internet)
  • Wifi y 3G a la misma hora
  • Android verificar el estado WIFI (desconectado o el usuario ha cambiado WIFI) ¿Cómo FLAG?
  • Escaneado Wi-Fi sin receptor de difusión?
  • Recuperar el estado de la conexión wifi (Android)
  • Compartir ajustes WiFi como QR-Code para WPA2 Enterprise
  • Android: detecta si Wifi requiere acceso al navegador
  • Adición de un nuevo portador de red a Android
  • Impresión Bluetooth y WIFI para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.