studio programacion móviles libro desarrollo curso aplicaciones android broadcastreceiver

android - programacion - Informe la actividad de un BroadcastReceiver SOLAMENTE si está en primer plano



manual de programacion android pdf (2)

Tal vez sea fácil, pero hasta ahora no pude darme cuenta de esto ... Tengo un BroadcastReceiver espera de que AlarmMangager lo active. 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 Intención 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 comenzar la Actividad con mi intención! Manejo el repintado de las vistas en mi método onResume (), por lo que no me importa en absoluto.

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

EDITAR: mi BroadcastReceiver está esperando las alarmas que deben notificarse 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 al frente o no.


Así que esta es casi la respuesta de Bino, pero: en lugar de mover el receptor a la actividad, use dos receptores con diferentes Intenciones. El primero es su Intención de alarma original, con un receptor registrado en el manifiesto como ya lo ha hecho, y luego ese receptor envía un segundo intento de transmisión, que es manejado por un receptor registrado por la actividad como dice Bino.

He hecho esto 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á familiarizado con AlarmManager (creando una nueva alarma, registre un receptor ...), así que no voy a hablar de eso. Solo te doy una solución para tu pregunta.

En lugar de registrar un BroadcastReceiver en un archivo de clase y en un manifiesto, solo crea un nuevo BroadcastReceiver en su actividad, y luego, regístrelo en el método onResume y anule el registro en el método onPause, algo como esto 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á la intención de alarma cuando su actividad esté en primer plano :)

(Perdon si mi ingles no esta claro)