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.
- Forma de recortar la imagen cuadrada de Android en la aplicación
- ¿Cómo utilizar FileLock en android?
- Java.lang.UnsatisfiedLinkError: No se pudo cargar eposprint: findLibrary returned null
- Usando ScreenUtils para guardar la captura de pantalla como imagen en libgdx
- ¿Multiplicar dobles en java?
- Android: cómo cambiar el diseño en el botón de clic?
- ¿Cuál es la forma más confiable para determinar la frecuencia de reloj de la CPU de los teléfonos Android?
- En la aplicación de facturación - BillingHelper no completamente instanciado
- E / art: Error al enviar la respuesta al depurador: Canal roto, pero la aplicación todavía se ejecuta
- ¿Cómo evitar que ProgressDialog descarte el cambio de rotación de la pantalla en Android?
- Samsung Galaxy S8 modo de pantalla completa
- ¿Cómo analizar XML y almacenarlo en un mapa con SimpleXML?
- ¿Cómo generar la misma clave AES en Java (Android) como en .Net?
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.
- Ciertos estilos de ProgressBar no se muestran en Nexus 5 Android 5.0.1
- Cordova: No se puede instalar apk después de actualizar android a 5.1.1 Nexus 5