Pregunta

Tal vez sea fácil, pero realmente no podía resolver esto bien hasta ahora ... Tengo una BroadcastReceiver la espera de recibir provocada por la AlarmMangager -. Esto funciona bien

Ahora: porque el evento, si se produce, tiene que actualizar algunos elementos en la pantalla de la actividad principal, me gustaría enviar un Intento de ese fondo BroadcastReceiver a mi actividad - pero sólo si actualmente se encuentra en el primer plano, también conocido como activo.

Si no se está ejecutando o no visibles, no me importa - y lo último que quiero hacer es empezar la actividad, mi intención! Manejo los 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!

EDIT: mi BroadcastReceiver está a la espera para las alarmas que deben ser notificados al usuario. Por lo tanto, debe estar allí y declarada en el manifiesto. El problema es:., Tendrá que decidir si la mencionada actividad se encuentra actualmente en frente o no

¿Fue útil?

Solución

Así que esto es casi la respuesta de Bino, pero: en lugar de mover el receptor en la actividad, utilizar dos receptores, con distintos propósitos. El primero de ellos es su intención original de la alarma, con un receptor registrado en el manifiesto como que ya tiene, y después de que el receptor envía un segundo intento de transmisión, el cual es manejado por un receptor registrado por la actividad como dice Bino.

He hecho esto en mi propio proyecto temporizador, en github. Aquí están los rel="noreferrer"> receptor y el requery receptor . Esperamos que ayuda.

Otros consejos

Creo que usted está familiarizado con AlarmManager ahora (la creación de una nueva alarma, registrar un receptor ...) así que no voy a hablar de eso. Sólo darle una solución de tu pregunta.

En lugar de registrar un BroadcastReceiver en un archivo de clase y en el manifiesto, sólo se crea un nuevo BroadcastReceiver en su actividad, y luego, registrarlo en el método onResume, y anular 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 sólo recibirá la intención de alarma cuando su actividad es en primer plano:)

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top