Listener de Internet Ejemplo de Android

Estoy trabajando en la aplicación de Android que continuamente permanece conectado con Internet. Si el Internet está abajo que debe dar el mensaje apropiado al usuario.

¿Hay algo como Internet Listener? O cómo implementar este evento que siempre que la conexión a Internet no está disponible debería dar alerta.

Crear un receptor de difusión para que y registrarlo en el archivo de manifiesto.

Primero crear una nueva clase NetworkStateReceiver y extender BroadcastReceiver.

 public class NetworkStateReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Log.d("app","Network connectivity change"); if(intent.getExtras()!=null) { NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO); if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) { Log.i("app","Network "+ni.getTypeName()+" connected"); } } if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) { Log.d("app","There's no network connectivity"); } } } 

Ponga este código en su AndroidManifest.xml bajo el elemento "application":

 <receiver android:name=".NetworkStateReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> 

Y añada este permiso

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

EDITAR

Este código sólo detecta el cambio de conectividad pero no puede decir si la red a la que está conectado tiene acceso a Internet. Utilice este método para comprobar que –

 public static boolean hasActiveInternetConnection(Context context) { if (isNetworkAvailable(context)) { 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, "Error checking internet connection", e); } } else { Log.d(LOG_TAG, "No network available!"); } return false; } 

El código de Chirag Raval arriba funciona. El problema es que el oyente se invocará incluso cuando la aplicación no se está ejecutando en primer plano.

IMHO, el mejor enfoque es registrar / anular el registro del receptor en los onResume() / onPause() de todas sus actividades de aplicación. Este código debe hacerlo:

 private final NetworkStateReceiver stateReceiver = new NetworkStateReceiver(); @Override protected void onResume() { super.onResume(); IntentFilter filter = new IntentFilter(); filter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); registerReceiver(stateReceiver, filter); } @Override protected void onPause() { super.onPause(); unregisterReceiver(stateReceiver); } 

Obviamente, elimine el registro del archivo AndroidManifest.xml .

Usando esta solución, el receptor será llamado también cuando cambie entre las actividades de su aplicación (asumiendo que las está cerrando). En tal caso, utilice un indicador estático (compartido entre todas sus actividades) como en el ejemplo siguiente (llamado en online ):

 public class NetworkStateReceiver extends BroadcastReceiver { private static boolean online = true; // we expect the app being online when starting public static final String TAG = NetworkStateReceiver.class.getSimpleName(); public void onReceive(Context context, Intent intent) { Log.d(TAG,"Network connectivity change"); ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ni = manager.getActiveNetworkInfo(); if (ni == null || ni.getState() != NetworkInfo.State.CONNECTED) { Log.d(TAG,"There's no network connectivity"); if (online) // don't show the message if already offline Toast.makeText(context, R.string.noInternet, Toast.LENGTH_SHORT).show(); online = false; } else { Log.d(TAG,"Network "+ni.getTypeName()+" connected"); if (!online) // don't show the message if already online Toast.makeText(context, R.string.backOnline, Toast.LENGTH_SHORT).show(); online = true; } } } 

Si inicia la aplicación cuando está fuera de línea, aparecerá el mensaje Toast; De lo contrario, sólo aparece cuando se pierde / restablece la conexión.

  • Alternativa para String.join en Android?
  • Error de compilación de Android; Java plugin se ha aplicado, no es compatible con Android
  • Descripción de la anotación @SuppressLint ("NewApi")
  • Android ClassNotFoundException: No encontró la clase en el path
  • Necesito rodear un flotador a dos decimales en Java
  • Cómo enviar cadena de Android a php
  • Conecte con los clientes de iOS y Android a SockJS Backend
  • Android - ¿Cómo puedo "iniciar" o "inicializar" un Fragmento de una actividad?
  • Android OpenGL ES 2.0 sólo está limitado a 16 texturas en la memoria?
  • Android weakReference to Activity se anula mientras se está ejecutando la actividad
  • Java.lang.IllegalMonitorStateException: objeto no bloqueado por hilo antes de wait ()?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.