verificar validar tengo studio internet hay hacer detectar conexión conexion comprobar check java android networking wifi ping

java - validar - Compruebe la conexión a Internet activa Android



validar si tengo internet android studio (6)

Intento escribir una parte en mi aplicación que diferencie entre una conexión Active Wifi y una conexión real a internet. Averiguar si hay una conexión Wifi activa es bastante simple usando el administrador de conexión, sin embargo, cada vez que trato de probar si puedo conectarme a un sitio web cuando el Wifi está conectado pero no hay conexión a Internet, termino en un ciclo infinito.
Intenté hacer ping a google, pero 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) { e.printStackTrace(); } boolean reachable = (returnVal==0); return reachable;

También probé este código:

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

pero no pude conseguirlo. Soy apto para trabajar.


Consulta un sitio web como este:

Haga que su clase implemente AsyncTaskCompleteListenere<Boolean> agregando el siguiente método a su clase:

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

Agregue un método simple testConnection a su clase para llamar cuando desee verificar 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 devuelve la onTaskComplete 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); } }


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; }


Para verificar si el dispositivo Android tiene una conexión activa, uso este método has ActiveInternetConnection () a continuación que (1) intenta detectar si la red está disponible y (2) luego se conecta 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í hay un código moderno que usa AsynTask para evitar un problema donde Android se bloquea al intentar 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();


Usé este método. ¡Funcionó para mí! Para las personas que quieren obtener el verdadero Internet!

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; } }

¡Por hacer este método todo el tiempo! Solo usa un receptor y =>

httpURLConnection.getResponseCode() == 200

¡Esto significa que Internet está conectado!


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 pero no puedo encontrarla.

EDITAR:

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