BroadcastReceiver no funciona cuando la aplicación no se está ejecutando

En mi archivo de manifiesto he declarado el receptor. (como sigue)

<receiver android:name=".OnAlarmReceive" /> 

Sin embargo, una vez que cierro mi aplicación, no puedo obtener las alarmas y las notificaciones. Aparentemente, nunca se hace una llamada a OnReceive en mi Broadcast receiver .

 public class OnAlarmReceive extends BroadcastReceiver { @Override public void onReceive(Context context, Intent arg1) { //various stuff } } 

Dentro de MainActivity, mi clase de administrador de alarmas es como sigue.

 AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); Intent intent = new Intent("MY_ALARM_NOTIFICATION"); intent.setClass(this, OnAlarmReceive.class); intent.putExtra("message", message); PendingIntent pendingIntent = PendingIntent .getBroadcast(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); Calendar timeCal = Calendar.getInstance(); timeCal.set(Calendar.HOUR_OF_DAY, hour); timeCal.set(Calendar.MINUTE, minutes); alarmManager.set(AlarmManager.RTC_WAKEUP, timeCal.getTimeInMillis(), pendingIntent); 

Y mi manifiesto como sigue:

  <receiver android:name=".OnAlarmReceive"> <intent-filter android:priority="1"> <action android:name="MY_ALARM_NOTIFICATION"/> </intent-filter> </receiver> 

¿Qué debo hacer para recibir las notificaciones / alarmas aunque haya cerrado mi aplicación. Servicio de fondo?

Debe agregar intención-filtro en manifiesto, como

 receiver android:name=".SmsBroadCastReceiver"> <intent-filter android:priority="20"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> 

Como Gong Cong dice, usted necesita declarar qué eventos su receptor debe escuchar.

Por ejemplo :

 <receiver android:name=".OnAlarmReceive"> <intent-filter> <action android:name="MY_ALARM_NOTIFICATION"/> </intent-filter> </receiver> 

Y luego cuando su conjunto su alarma, utilice una intención con su acción:

 Intent intent = new Intent("MY_ALARM_NOTIFICATION"); intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); PendingIntent pi = PendingIntent.getBroadcast( this, 0, intent, 0 ); 

¡Tu código funciona bien!

Todo lo que tienes que hacer es cambiar esta línea:

 alarmManager.set(AlarmManager.RTC_WAKEUP, timeCal.getTimeInMillis(), pendingIntent); 

Con esta línea:

 alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 5000, pendingIntent); 

Y el código en el "onReceive" se ejecutará después de 5000ms (5sec), incluso cuando la aplicación no se está ejecutando

En mi entendimiento, en algunos cased dependiendo de la forma de implementaciones, OS tiene autoridad para ajustar el tiempo de alarma establecido. Así que trate de usar AlarmManager.set (…), AlarmManager.setexact (…) etc en consecuencia. En algunos casos, dependiendo del fabricante (sistema operativo Android personalizado), existe la posibilidad de que el sistema operativo esté bloqueando la alarma de incendio.

La adición de android:exported="true" para el receptor en el archivo de manifiesto me ayudó a recibir alarmas (y por lo tanto, despertar la aplicación) incluso cuando la aplicación se apagó (intencionalmente por mí, la eliminación de la aplicación de la lista de tareas).

1.Declare el receptor en el Manifest-file:

 <receiver android:name="your.package.name.TestAlarmReceiver"></receiver> 

Recuerde siempre que todo el sistema Android distingue entre mayúsculas y minúsculas. Así que compruebe que su ortografía es correcta en AndroidMainfest.xml.

2.Si usted crea un PendingIntent para su receptor, agregue por favor un requestCode – incluso es un número al azar! Sin su código onReceive nunca se llama!

La función que iniciará AlarmManager debería tener el siguiente aspecto:

 public static void scheduleTestAlarmReceiver(Context context) { Intent receiverIntent = new Intent(context, TestAlarmReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(context, 123456789, receiverIntent, 0); AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+startDelay, someDelay, sender); } 

Clase BroadcastReceiver:

 package your.package.name; public class TestAlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent arg1) { // your code here! } } 

El artículo original: ¿Por qué mi BroadcastReceiver no se llama?

  • La notificación en curso en Android honeycomb tiene un comportamiento inconsistente
  • Notificación mediante RemoteViews no funciona
  • GetIntent () Extras siempre NULL
  • En Android (en JB), ¿cómo puedo añadir una acción a una notificación personalizada rica?
  • NameError: uninitialized constant Rpush :: Gcm Estoy intentando usar rpush para mi aplicación móvil. Pero sigo recibiendo este error
  • Android - ¿Cómo configurar una notificación para una fecha específica en el futuro?
  • Reiniciar la aplicación falla en android
  • ¿Puedo anular el icono predeterminado de notificación push en android desde el icono de la aplicación hasta el icono personalizado?
  • Intención de reanudar una actividad previamente detenida (llamada desde una notificación)
  • Firebase (FCM): activa la actividad y pasa los datos al hacer clic en la notificación. androide
  • No se puede establecer el sonido de notificación push en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.