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

Tal vez es fácil, pero realmente no podía resolver esto hasta ahora … Recibí un BroadcastReceiver esperando a ser activado por el AlarmMangager, esto funciona bien.

Ahora: debido a que el evento, si ocurre, necesita actualizar algunos elementos en la pantalla de la Actividad principal, me gustaría enviar un Intento desde ese fondo BroadcastReceiver a mi Actividad, pero solo si está actualmente en primer plano, también conocido como activo.

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

¿Alguna pista sobre cómo hacer eso? ¡Gracias!

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

Así que esta es casi la respuesta de Bino, pero: en lugar de mover el receptor a la actividad, usa dos receptores, con diferentes Intents. 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 un segundo bash de transmisión, que es manejado por un receptor registrado por la actividad como dice Bino.

Lo hice en mi propio proyecto de temporizador, en github. Aquí están el receptor de alarma y el receptor de consulta . Espero que ayude.

Creo que ya estás familiarizado con AlarmManager (creando una nueva alarma, registrando un receptor …) así que no voy a hablar de eso. Solo dale una solución para tu pregunta.

En lugar de registrar un BroadcastReceiver en un archivo de clase y en manifiesto, solo crea un nuevo BroadcastReceiver en su actividad y luego, lo registra en el método onResume y lo anula en el método onPause, 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 solo recibirá el bash de alarma cuando tu actividad esté en primer plano 🙂

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