Oyente de red Android

Quiero comprobar cuando la red de teléfono en Android se apaga. ¿Puedo capturar ese evento?

No estoy recibiendo la API adecuada ni ningún ejemplo que explique lo mismo. Si alguien había hecho o cualquier vínculo de ejemplo sería realmente útil.

Nueva clase java:

public class ConnectionChangeReceiver extends BroadcastReceiver { @Override public void onReceive( Context context, Intent intent ) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE ); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo( ConnectivityManager.TYPE_MOBILE ); if ( activeNetInfo != null ) { Toast.makeText( context, "Active Network Type : " + activeNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show(); } if( mobNetInfo != null ) { Toast.makeText( context, "Mobile Network Type : " + mobNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show(); } } } 

Nuevo xml en tu AndroidManifest.xml bajo el elemento "manifest":

 <!-- Needed to check when the network connection changes --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

Nuevo xml en su AndroidManifest.xml bajo el elemento "application":

 <receiver android:name="com.blackboard.androidtest.receiver.ConnectionChangeReceiver" android:label="NetworkConnection"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver> 

He estado utilizando una pequeña configuración para comprobar el ancho de banda para determinar cómo escalar las cosas, como las imágenes.

Bajo la actividad, en AndroidManifest:

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

En la actividad donde se realizan los controles:

 boolean network; int bandwidth; @Override public void onCreate(Bundle savedInstanceState) { ... network = isDataConnected(); bandwidth = isHighBandwidth(); registerReceiver(new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { network = isDataConnected(); bandwidth = isHighBandwidth(); } }, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")); ... } ... private boolean isDataConnected() { try { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); return cm.getActiveNetworkInfo().isConnectedOrConnecting(); } catch (Exception e) { return false; } } private int isHighBandwidth() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = cm.getActiveNetworkInfo(); if (info.getType() == ConnectivityManager.TYPE_WIFI) { WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE); return wm.getConnectionInfo().getLinkSpeed(); } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) { TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); return tm.getNetworkType(); } return 0; } 

Un ejemplo de uso sería:

 if (network) { if (bandwidth > 16) { // Code for large items } else if (bandwidth <= 16 && bandwidth > 8) { // Code for medium items } else { //Code for small items } } else { //Code for disconnected } 

No es el más bonito, pero permite suficiente flexibilidad que puedo cambiar el límite de ancho de banda de los elementos en función de lo que son y mis requisitos para ellos.

Si utilizar Android Annotations es una opción para que pruebe esto en sus actividades – eso es todo, el resto se genera:

 @Receiver(actions = ConnectivityManager.CONNECTIVITY_ACTION, registerAt = Receiver.RegisterAt.OnResumeOnPause) void onConnectivityChange() { //react } 

Úselo sólo si ya usa AndroidAnnotations: poner esta dependencia dentro de su proyecto sólo para este fragmento de código sería excesivo.

La respuesta anterior sólo funciona si los datos de paquetes móviles están habilitados. De lo contrario, ConnectivityManager sería nulo y ya no puede recuperar NetworkInfo. La manera alrededor de él es utilizar un PhoneStateListener o TelephonyManager en lugar de otro.

  • Cómo tratar los problemas de la red
  • Iptables en android
  • La pila TCP XBox 360 no responde a sondas TCP Zero Window con una carga útil de 0 bytes
  • ¿Cómo recibir devoluciones de llamada en la pérdida de red para Android Nougat cuando la aplicación está cerrada?
  • Capturar el tráfico del teléfono móvil en wireshark
  • Compruebe la conexión a Internet activa Android
  • ServerSocket no acepta en el emulador droid
  • Conecte el androide al LAN local vía el teléfono (sobre wifi O vía la conexión del USB)
  • Sugerencias sobre el desarrollo de juegos multijugador en iOS y Android?
  • Envío de SQLite db al servicio web
  • ¿Cómo crear XWalkWebResourceResponse?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.