¿Cómo puedo recibir una notificación cuando el dispositivo pierde conectividad de red en android L (API 21)

Estoy utilizando este código para ser notificado cuando la conexión se pierde en API 20 y hacia abajo.

registerReceiver(getConnectivityStateBroadcastReceiver(), new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); private class ConnectivityStateBroadcastReceiver extends BaseBroadcastReceiver { /** * @param userLoggedIn * @param context * @param intent */ @Override protected void onReceive(Boolean userLoggedIn, Context context, Intent intent) { Bundle extras = intent.getExtras(); boolean notConnected = extras.getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); // DO something } } 

Pero no funciona en la API 21.

¿Cómo puedo arreglar eso? Tal vez tiene que ver con ConnectivityManager.NetworkCallbak pero no encontré ningún ejemplo de cómo usarlo. Gracias.

Aceptar, así que averiguar cómo hacerlo, pero apreciaría la confirmación de que esta solución es la correcta.

Todo lo que hice fue agregar una llamada a este código en el onCreate de mi clase de aplicación

 /** * */ @SuppressLint("NewApi") private void registerConnectivityNetworkMonitorForAPI21AndUp() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { return; } ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkRequest.Builder builder = new NetworkRequest.Builder(); connectivityManager.registerNetworkCallback( builder.build(), new ConnectivityManager.NetworkCallback() { /** * @param network */ @Override public void onAvailable(Network network) { sendBroadcast( getConnectivityIntent(false) ); } /** * @param network */ @Override public void onLost(Network network) { sendBroadcast( getConnectivityIntent(true) ); } } ); } /** * @param noConnection * @return */ private Intent getConnectivityIntent(boolean noConnection) { Intent intent = new Intent(); intent.setAction("mypackage.CONNECTIVITY_CHANGE"); intent.putExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, noConnection); return intent; } 

Y en el IntentFilter que ya está monitoreando mi conectividad para API 20 y menos, agregé esto

 IntentFilter filter = new IntentFilter(); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); filter.addAction("mypackage.CONNECTIVITY_CHANGE"); 

Y ahora mi receptor de difusión que ya está trabajando recibe notificación sobre cambios de red en la API 21 también.

Agregando a la respuesta anterior: Más información sobre cómo manejar el estado de la red en Lollipop se puede encontrar en https://developer.android.com/about/versions/android-5.0.html

  • Efecto de ondulación de Android anulado por el estado seleccionado
  • Android L (5.x) Activar / desactivar "Mobile Data" mediante programación
  • RecyclerView con fragmentos
  • Android Lollipop preestablece datos móviles cuando Wi-Fi no tiene acceso a Internet?
  • Elevación en Android Lollipop no funciona
  • ¿Hay una manera de compartir un mismo LayoutManager entre múltiples RecyclerViews anidados
  • Colorear la barra de estado de Android en Nav Drawer
  • Implementar efecto de ondulación fuera de ImageButton
  • Cómo evitar la fecha seleccionada pasada en DatePickerDialog (setMinDate no funciona como se esperaba)
  • Mostrar un RecyclerView en Fragmento
  • AudioRecord registra sonido intermitente en Android L Vista previa del desarrollador
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.