Implementé un BroadcastReceiver que es activado por el AlarmManager. El AlarmManager se inicializa en BOOT_COMPLETED. Entonces tengo que declarar el receptor en el manifiesto.Cómo determinar si una de mis actividades está en primer plano
Mi problema es que quiero que el BroadcastReceiver solo haga algo cuando ninguna de mis actividades está en primer plano (también conocido como el usuario no está interactuando con mi aplicación). Extraigo información de un servidor remoto y no quiero notificar al usuario si está actualmente en mi aplicación.
Hasta ahora no he logrado encontrar una manera de determinar si mi aplicación está en primer plano. ¿Hay alguna manera de hacer tal cosa? El ActivityManager me dice si mi aplicación se está ejecutando, pero no si está en primer plano.
El problema es más o menos el mismo que se describe aquí: Inform Activity from a BroadcastReceiver ONLY if it is in the foreground
SOLUCIÓN:
Después de evaluar varias soluciones quiero esbozar rápidamente lo que creo que es el mejor método para hacer frente a las actividades en el fondo, frente.
La forma preferida es registrar un receptor de difusión en el método onResume de su actividad y anular el registro en las actividades en onPause. Cualquier servicio u otro elemento de fondo tendrá que enviar un intento de difusión con una acción específica que su actividad interceptará.
Si su actividad está en primer plano, tendrá su receptor de intención registrado y podrá tratar directamente con el intento de envío de su servicio. Si no está en primer plano, no recibirá el intento, pero el servicio que invocó la transmisión sabrá que nadie ha interceptado su intento de transmisión y podrá tratarlo por sí mismo. Por ejemplo, que se podría poner en marcha la actividad deseada, mostrar una notificación etc.
"el servicio que invoca la emisión sabrá que nadie interceptado su intención de difusión" - posiblemente una pregunta estúpida, pero ¿cómo lo sabrá? – ostergaard
@ajostergaard Creo que es así: la difusión envió el intento "¿Estás en foregraund"? Cuando la actividad está en primer plano, puede recibir esa intención (porque registra el recevier propio en el resultado) y responde con el intento "sí, estoy en primer plano". La difusión puede revelar eso, así conocer el estado de la actividad. Por cierto. Compruebe mi respuesta para esta pregunta a continuación :) – mklimek