Informieren Sie die Aktivität von einem Rundfunkstock nur dann, wenn es sich im Vordergrund befindet

StackOverflow https://stackoverflow.com/questions/2282435

  •  21-09-2019
  •  | 
  •  

Frage

Vielleicht ist es einfach, aber ich könnte das bisher nicht wirklich herausfinden ... Ich habe eine BroadcastReceiver Warten darauf, vom Alarmmangager ausgelöst zu werden - dies funktioniert einwandfrei.

Jetzt: Weil das Ereignis, wenn es auftritt, einige Elemente auf dem Bildschirm der Hauptaktivität aktualisieren muss, möchte ich eine Absicht von diesem Hintergrund -Rundfunk an meine Aktivität senden - aber nur Wenn es sich derzeit im Vordergrund befindet, auch bekannt als aktiv.

Wenn es nicht läuft oder nicht sichtbar ist, ist es mir egal - und das Letzte, was ich tun möchte, ist die Aktivität mit meiner Absicht zu beginnen! Ich kümmere mich um Neulackierung der Ansichten in meiner OnResume () -Methode, daher ist es mir überhaupt egal.

Irgendwelche Hinweise darauf, wie das geht? Vielen Dank!

BEARBEITEN: Mein Rundfunkwesen wartet auf Alarme, die dem Benutzer mitgeteilt werden müssen. Also muss es dort sein und im Manifest deklariert werden. Das Problem ist: Es muss entscheiden, ob die genannte Aktivität derzeit voranschreitet oder nicht.

War es hilfreich?

Lösung

Das ist also fast Binos Antwort, aber anstatt den Empfänger in die Aktivität zu bewegen, verwenden Sie zwei Empfänger mit unterschiedlichen Absichten. Der erste ist Ihre ursprüngliche Alarmabsicht, wobei ein Empfänger, der in dem Manifest registriert ist, wie Sie bereits haben, und dann sendet dieser Empfänger eine zweite Sendungsabsicht, die von einem von der Aktivität registrierten Empfänger wie Bino verarbeitet wird.

Ich habe dies in meinem eigenen Timer -Projekt auf GitHub gemacht. Hier sind die Alarmempfänger und die Requery Receiver. Ich hoffe, das hilft.

Andere Tipps

Ich glaube, dass Sie jetzt mit Alarmmanager vertraut sind (einen neuen Alarm erstellen, einen Empfänger registrieren ...), damit ich nicht darüber sprechen werde. Geben Sie einfach eine Lösung für Ihre Frage.

Anstatt einen Broadcastreceiver in einer Klassendatei und in Manifest zu registrieren, erstellen Sie nur einen neuen Broadcastreceiver in Ihrer Aktivität und registrieren Sie ihn dann in der OnResume -Methode und registrieren Sie ihn in der OnPause -Methode, so wie diese in Ihrer Aktivität:

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();
}

Der Empfänger erhält nur die Alarmabsicht, wenn Ihre Aktivität im Vordergrund steht :)

(Entschuldigung, wenn mein Englisch nicht klar ist)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top