Informar la actividad de un BroadcastReceiver SÓLO si está en primer plano

Tal vez es fácil, pero realmente no podía entender esto hasta el momento … Tengo un BroadcastReceiver esperando para ser activado por el AlarmMangager – esto funciona bien.

Ahora: porque el evento, si ocurre, necesita actualizar algunos elementos en la pantalla de la actividad principal, me gustaría enviar una Intención desde ese fondo BroadcastReceiver a mi Actividad – pero sólo si está actualmente en primer plano, también conocido como activo.

Si no se está ejecutando o no es visible, no me importa – y lo último que quiero hacer es iniciar la Actividad por mi intención! Puedo pintar las vistas en mi método onResume (), así que no me importa en absoluto.

¿Algún consejo sobre cómo hacer eso? ¡Gracias!

EDIT: mi BroadcastReceiver está esperando alarmas que deben ser notificadas al usuario. Por lo tanto, debe estar allí y declarado en el manifiesto. El problema es: tendrá que decidir si la Actividad mencionada está actualmente en el frente o no.

Así que esta es casi la respuesta de Bino, pero: en lugar de mover el receptor en la actividad, utilice dos receptores, con diferentes intentos. El primero es su Intención de alarma original, con un receptor registrado en el manifiesto como ya lo tiene, y luego ese receptor envía una segunda intención de difusión, la cual es manejada por un receptor registrado por la actividad como dice Bino.

Lo he hecho en mi propio proyecto de temporizador, en github. Aquí están el receptor de la alarma y el receptor de la requery . Espero que ayude.

Creo que ya está familiarizado con AlarmManager (crear una nueva Alarma, registrar un receptor …) así que no voy a hablar de eso. Sólo darle una solución para su pregunta.

En lugar de registrar un BroadcastReceiver en un archivo de clase y en el manifiesto, sólo cree un nuevo BroadcastReceiver en su actividad y, a continuación, regístrelo en el método onResume y anótelo en el método onPause, algo así en su actividad:

 private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //do something } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mIntentFilter = new IntentFilter(); mIntentFilter.addAction("your alarm action"); ... } @Override protected void onResume() { registerReceiver(mIntentReceiver, mIntentFilter); ... super.onResume(); } @Override protected void onPause() { unregisterReceiver(mIntentReceiver); ... super.onPause(); } 

El receptor sólo recibirá la intención de la alarma cuando su actividad está en primer plano 🙂

(Lo siento si mi inglés no está claro)

  • Android <receptor> - BroadcastReceiver no se llama
  • ¿Puedo seguir recibiendo la intención del receptor de difusión después de que la fuerza detuviera mi aplicación en android?
  • QueryBroadcastReceivers no encuentra los receptores registrados con registerReceiver
  • API de geocodificación de Android BroadcastReceiver no activado
  • Llamar a SetContentView () desde el receptor de difusión
  • El receptor de reinicio no funciona en los teléfonos xiaomi
  • Tratando de tener un Receptor Broadcast sin filtro
  • Iniciar actividad marcando un número
  • Receptor de difusión para detectar el inicio de la aplicación
  • ¿Dónde anular el registro de BroadcastReceiver (en un servicio)?
  • Haga clic en la notificación GCM para no abrir la actividad deseada en Android Kitkat
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.