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.
- ChildFragmentManager java.lang.IllegalStateException: La actividad ha sido destruida
- ¿Cuál es la manera más eficiente de ordenar simultáneamente tres ArrayLists en Java
- Android: obtener la rotación actual de una matriz
- ¿Enfoque para la fijación de NoClassDefFoundError?
- Uso de Google Analytics para rastrear fragmentos
- Conectar a un socket bloquea la interfaz de usuario
- Cómo hacer una copia de un archivo en android?
- ScrollView: Pasa los eventos de toque a los niños
- LibGDX movimiento no suave
- Obtener "EVP_DecryptFinal_ex: longitud de bloque final errónea" durante el desencriptado
- Creación de un adaptador a un CustomView
- ¿Cuál es la estructura / patrón de android / java para organizar las llamadas de servicio web http en el proyecto?
- Obtener boolean de la base de datos utilizando Android y SQLite
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