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.

  • android enviar archivo de vídeo (mp4) a php servidor
  • ¿Se puede acceder a los valores definidos en MANIFEST.MF mediante programación?
  • Múltiples hilos de lectura desde el mismo socket
  • Cómo obtener el espaciado de caracteres de fuente en Android
  • Android: ¿abro un recurso de archivo cada vez que quiero iniciar sesión
  • ¿Por qué Merge sort se utiliza para objetos en Android / Java API?
  • Appcompat res values-v21 Los errores de themes_base en eclipse no desaparecen
  • Mockito - burlándose de una interfaz - lanzando NullPointerException
  • Encuentra la IP del servidor en la red local con el puerto conocido en Java / Android
  • Crear una instancia de una clase abstracta en Kotlin
  • Error de vista web de Android "Señal fatal 5 (SIGTRAP)"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.