Android comprobar la conexión a Internet

Quiero crear una aplicación que utilice Internet y estoy intentando crear una función que compruebe si hay una conexión disponible y si no es así, vaya a una actividad que tenga un botón de reintento y una explicación.

Adjunto es mi código hasta el momento, pero estoy recibiendo el error Error de Syntax error, insert "}" to complete MethodBody.

Ahora he estado colocando estos en tratar de conseguir que funcione, pero hasta ahora no hay suerte … Cualquier ayuda sería apreciada.

 public class TheEvoStikLeagueActivity extends Activity { private final int SPLASH_DISPLAY_LENGHT = 3000; /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); private boolean checkInternetConnection() { ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE); // ARE WE CONNECTED TO THE NET if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() && conMgr.getActiveNetworkInfo().isConnected()) { return true; /* New Handler to start the Menu-Activity * and close this Splash-Screen after some seconds.*/ new Handler().postDelayed(new Runnable() { public void run() { /* Create an Intent that will start the Menu-Activity. */ Intent mainIntent = new Intent(TheEvoStikLeagueActivity.this, IntroActivity.class); TheEvoStikLeagueActivity.this.startActivity(mainIntent); TheEvoStikLeagueActivity.this.finish(); } }, SPLASH_DISPLAY_LENGHT); } else { return false; Intent connectionIntent = new Intent(TheEvoStikLeagueActivity.this, HomeActivity.class); TheEvoStikLeagueActivity.this.startActivity(connectionIntent); TheEvoStikLeagueActivity.this.finish(); } } } 

Este método comprueba si el móvil está conectado a Internet y devuelve true si está conectado:

 private boolean isNetworkConnected() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); return cm.getActiveNetworkInfo() != null; } 

En manifiesto

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

Editar: Este método realmente comprueba si el dispositivo está conectado a Internet (Hay una posibilidad de que esté conectado a una red, pero no a Internet).

 public boolean isInternetAvailable() { try { InetAddress ipAddr = InetAddress.getByName("google.com"); //You can replace it with your name return !ipAddr.equals(""); } catch (Exception e) { return false; } } 

Compruebe que esté "conectado" a una red:

 public boolean isNetworkAvailable(Context context) { final ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)); return connectivityManager.getActiveNetworkInfo() != null && connectivityManager.getActiveNetworkInfo().isConnected(); } 

Compruebe que esté "conectado" a una red:

 public boolean isInternetAvailable() { try { final InetAddress address = InetAddress.getByName("www.google.com"); return !address.equals(""); } catch (UnknownHostException e) { // Log error } return false; } 

Permiso necesario:

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

https://stackoverflow.com/a/17583324/950427

Usted puede simplemente hacer ping a un sitio web en línea como google:

 public boolean isConnected() throws InterruptedException, IOException { String command = "ping -c 1 google.com"; return (Runtime.getRuntime().exec (command).waitFor() == 0); } 

Los métodos anteriores funcionan cuando se conecta a una fuente Wi-Fi oa través de paquetes de datos de teléfonos celulares. Pero en caso de conexión Wi-Fi hay casos en los que se le pide más a Sign-In como en el Café. Por lo tanto, en ese caso su aplicación fallará como usted está conectado a la fuente Wi-Fi, pero no con Internet.

Este método funciona bien.

  public static boolean isConnected(Context context) { ConnectivityManager cm = (ConnectivityManager)context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (activeNetwork != null && activeNetwork.isConnected()) { try { URL url = new URL("http://www.google.com/"); HttpURLConnection urlc = (HttpURLConnection)url.openConnection(); urlc.setRequestProperty("User-Agent", "test"); urlc.setRequestProperty("Connection", "close"); urlc.setConnectTimeout(1000); // mTimeout is in seconds urlc.connect(); if (urlc.getResponseCode() == 200) { return true; } else { return false; } } catch (IOException e) { Log.i("warning", "Error checking internet connection", e); return false; } } return false; } 

Por favor, utilice esto en un hilo separado del hilo principal, ya que hace una llamada de red y lanzará NetwrokOnMainThreadException si no se sigue.

Y también no ponga este método dentro de creer o cualquier otro método. Póngalo dentro de una clase y acceda a ella.

No se puede crear un método dentro de otro método, mover private boolean checkInternetConnection() { método fuera de onCreate

El EDIT de la respuesta aceptada muestra cómo comprobar si algo en el Internet se puede alcanzar. Tuve que esperar demasiado tiempo para una respuesta cuando éste no era el caso (con un wifi que no tiene una conexión a Internet). Desafortunadamente InetAddress.getByName no tiene un parámetro de tiempo de espera, por lo que el código siguiente funciona alrededor de eso:

 private boolean internetConnectionAvailable(int timeOut) { InetAddress inetAddress = null; try { Future<InetAddress> future = Executors.newSingleThreadExecutor().submit(new Callable<InetAddress>() { @Override public InetAddress call() { try { return InetAddress.getByName("google.com"); } catch (UnknownHostException e) { return null; } } }); inetAddress = future.get(timeOut, TimeUnit.MILLISECONDS); future.cancel(true); } catch (InterruptedException e) { } catch (ExecutionException e) { } catch (TimeoutException e) { } return inetAddress!=null && !inetAddress.equals(""); } 

No hay necesidad de ser complejo. La manera más sencilla y de la estructura es usar el permiso ACCESS_NETWORK_STATE y simplemente hacer un método conectado

 public boolean isOnline() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnectedOrConnecting(); } 

También puede utilizar requestRouteToHost si tiene un host particular y un tipo de conexión (wifi / móvil) en mente.

También necesitará:

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

En su android manifiesto.

Para más detalles ir aquí

Puede utilizar el siguiente fragmento para comprobar la conexión a Internet.

Será útil en ambos sentidos para comprobar qué tipo de conexión de red está disponible para que pueda realizar su proceso de esa manera.

Sólo tienes que copiar la siguiente clase y pegar directamente en tu paquete.

 /** * * @author Pratik Butani * */ public class InternetConnection { /** CHECK WHETHER INTERNET CONNECTION IS AVAILABLE OR NOT */ public static boolean checkConnection(Context context) { final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo(); if (activeNetworkInfo != null) { // connected to the internet Toast.makeText(context, activeNetworkInfo.getTypeName(), Toast.LENGTH_SHORT).show(); if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) { // connected to wifi return true; } else if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) { // connected to the mobile provider's data plan return true; } } return false; } } 

Ahora usted puede utilizar como:

 if (InternetConnection.checkConnection(context)) { // Its Available... } else { // Not Available... } 

NO OLVIDAR TOMAR permiso 🙂 🙂

 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

Usted puede modificar basado en su requisito.

Gracias.

Utilice este método:

 public static boolean isOnline() { ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); return netInfo != null && netInfo.isConnectedOrConnecting(); } 

Este es el permiso necesario:

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

Todos los métodos oficiales sólo indican que el dispositivo meteorológico está abierto para la red o no,
Si su dispositivo está conectado a Wifi, pero Wifi no está conectado a Internet, entonces este método fallará (Que suceden muchas veces), No hay método de detección de red interna informará acerca de este escenario, por lo que la clase de devolución de llamada Async que volverá en onConnectionSuccess y onConnectionFail

  new CheckNetworkConnection(this, new CheckNetworkConnection.OnConnectionCallback() { @Override public void onConnectionSuccess() { Toast.makeText(context, "onSuccess()", toast.LENGTH_SHORT).show(); } @Override public void onConnectionFail(String msg) { Toast.makeText(context, "onFail()", toast.LENGTH_SHORT).show(); } }).execute(); 

Llamada de red desde la tarea asíncrona

 public class CheckNetworkConnection extends AsyncTask<Void, Void, Boolean> { private OnConnectionCallback onConnectionCallback; private Context context; public CheckNetworkConnection(Context con, OnConnectionCallback onConnectionCallback) { super(); this.onConnectionCallback = onConnectionCallback; this.context = con; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected Boolean doInBackground(Void... params) { if (context == null) return false; boolean isConnected = new NetWorkInfoUtility().isNetWorkAvailableNow(context); return isConnected; } @Override protected void onPostExecute(Boolean b) { super.onPostExecute(b); if (b) { onConnectionCallback.onConnectionSuccess(); } else { String msg = "No Internet Connection"; if (context == null) msg = "Context is null"; onConnectionCallback.onConnectionFail(msg); } } public interface OnConnectionCallback { void onConnectionSuccess(); void onConnectionFail(String errorMsg); } } 

Clase real que hará ping a un servidor

 class NetWorkInfoUtility { public boolean isWifiEnable() { return isWifiEnable; } public void setIsWifiEnable(boolean isWifiEnable) { this.isWifiEnable = isWifiEnable; } public boolean isMobileNetworkAvailable() { return isMobileNetworkAvailable; } public void setIsMobileNetworkAvailable(boolean isMobileNetworkAvailable) { this.isMobileNetworkAvailable = isMobileNetworkAvailable; } private boolean isWifiEnable = false; private boolean isMobileNetworkAvailable = false; public boolean isNetWorkAvailableNow(Context context) { boolean isNetworkAvailable = false; ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); setIsWifiEnable(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()); setIsMobileNetworkAvailable(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected()); if (isWifiEnable() || isMobileNetworkAvailable()) { /*Sometime wifi is connected but service provider never connected to internet so cross check one more time*/ if (isOnline()) isNetworkAvailable = true; } return isNetworkAvailable; } public boolean isOnline() { /*Just to check Time delay*/ long t = Calendar.getInstance().getTimeInMillis(); Runtime runtime = Runtime.getRuntime(); try { /*Pinging to Google server*/ Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); int exitValue = ipProcess.waitFor(); return (exitValue == 0); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } finally { long t2 = Calendar.getInstance().getTimeInMillis(); Log.i("NetWork check Time", (t2 - t) + ""); } return false; } } 

Pruebe el siguiente código:

 public static boolean isNetworkAvailable(Context context) { boolean outcome = false; if (context != null) { ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] networkInfos = cm.getAllNetworkInfo(); for (NetworkInfo tempNetworkInfo : networkInfos) { /** * Can also check if the user is in roaming */ if (tempNetworkInfo.isConnected()) { outcome = true; break; } } } return outcome; } 

En manifiesto

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

en codigo,

 public static boolean isOnline(Context ctx) { if (ctx == null) return false; ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); if (netInfo != null && netInfo.isConnectedOrConnecting()) { return true; } return false; } 

Después de la declaración "return", no puede escribir ningún código (excluyendo try-finally block). Mueva sus nuevos códigos de actividad antes de las declaraciones de "devolución".

 public boolean checkInternetConnection(Context context) { ConnectivityManager connectivity = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity == null) { return false; } else { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) { for (int i = 0; i < info.length; i++){ if (info[i].getState()==NetworkInfo.State.CONNECTED){ return true; } } } } return false; } 

Utilice este código para comprobar la conexión a Internet

 ConnectivityManager connectivityManager = (ConnectivityManager) ctx .getSystemService(Context.CONNECTIVITY_SERVICE); if ((connectivityManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null && connectivityManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED) || (connectivityManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && connectivityManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI) .getState() == NetworkInfo.State.CONNECTED)) { return true; } else { return false; } 

Esta es una función que utilizo como parte de mi clase Utils :

 public static boolean isNetworkConnected(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); return (cm.getActiveNetworkInfo() != null) && cm.getActiveNetworkInfo().isConnectedOrConnecting(); } 

Utilícelo como: Utils.isNetworkConnected(MainActivity.this);

1- crear un nuevo archivo java (haga clic derecho en el paquete. New> class> nombre el archivo ConnectionDetector.java

2- Agregue el siguiente código al archivo

 <pre>package <add you package name> example com.example.example; import android.content.Context; import android.net.ConnectivityManager; public class ConnectionDetector { private Context mContext; public ConnectionDetector(Context context){ this.mContext = context; } public boolean isConnectingToInternet(){ ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); if(cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected() == true) { return true; } return false; } } 

3- MainActivity.java su MainActivity.java : la actividad donde desea comprobar la conexión y haga lo siguiente

A- crear y definir la función.

 <pre>ConnectionDetector mConnectionDetector;</pre> 

B- dentro de la "OnCreate" agregue lo siguiente

 <pre>mConnectionDetector = new ConnectionDetector(getApplicationContext());</pre> 

C- para comprobar la conexión utilice los siguientes pasos

 <pre> if (mConnectionDetector.isConnectingToInternet() == false) { //no connection- do something } else { //there is connection }</pre> 

Tenía ediciones con la respuesta de IsInternetAvailable que no probaba para las redes celulares, solamente si el wifi estaba conectado. Esta respuesta funciona para los datos wifi y móviles:

¿Cómo comprobar la conexión de red habilitar o deshabilitar en WIFI y 3G (plan de datos) en el móvil?

Esta es la otra opción para manejar toda la situación:

 public void isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) { } else { Toast.makeText(ctx, "Internet Connection Is Required", Toast.LENGTH_LONG).show(); } } 

Compruebe la red Disponible en androide con velocidad de los datos del Internet.

 public boolean isConnectingToInternet(){ ConnectivityManager connectivity = (ConnectivityManager) Login_Page.this.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) for (int i = 0; i < info.length; i++) if (info[i].getState() == NetworkInfo.State.CONNECTED) { try { HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection()); urlc.setRequestProperty("User-Agent", "Test"); urlc.setRequestProperty("Connection", "close"); urlc.setConnectTimeout(500); //choose your own timeframe urlc.setReadTimeout(500); //choose your own timeframe urlc.connect(); int networkcode2 = urlc.getResponseCode(); return (urlc.getResponseCode() == 200); } catch (IOException e) { return (false); //connectivity exists, but no internet. } } } return false; } 

Esta función devuelve verdadero o falso. Debe obtener permiso de usuario

  <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
  • HttpClient de Android que envía la petición a la máquina de anfitrión sobre USB
  • Cómo tratar los problemas de la red
  • ¿Cómo puedo comunicarme con un dispositivo Android a través de SSH?
  • Oyente de red Android
  • Android: Restablecer programaticamente la señal de red de radio del teléfono
  • Iptables en android
  • Temas y contribuciones para Volley
  • El mensaje de HttpPost de Android no enviará su carga útil a través del cable
  • UnityWebRequest Incorporación de datos de usuario y contraseña para la autenticación HTTP básica que no funciona en Android
  • Cómo obtener la dirección IP y los nombres de todos los dispositivos en la red local en Android
  • La pila TCP XBox 360 no responde a sondas TCP Zero Window con una carga útil de 0 bytes
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.