Ich habe eine Android-Anwendung, die den ganzen Tag sporadisch geweckt werden muss.Wie übertrage ich Daten von einem BroadcastReceiver zu einer Aktivität, die gerade gestartet wird?
Dazu verwende ich den AlarmManager, um einen PendingIntent einzurichten und einen BroadcastReceiver auszulösen. Dieser BroadcastReceiver startet dann eine Aktivität, um die Benutzeroberfläche in den Vordergrund zu bringen.
Alles oben scheint zu funktionieren, in dem die Aktivität sich korrekt startet; aber ich möchte, dass der BroadcastReceiver der Aktivität mitteilt, dass er durch den Alarm gestartet wurde (im Gegensatz zum Starten durch den Benutzer). Um dies zu tun Ich versuche, aus der OnReceive() -Methode des BroadcastReceiver eine Variable im Extra Bündel der Absicht zu setzen, also:
Intent i = new Intent(context, MyActivity.class);
i.putExtra(wakeupKey, true);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
Im onResume() -Methode meiner Tätigkeit hat mich dann sucht die Existenz dieser boolean Variable:
protected void onResume() {
super.onResume();
String wakeupKey = "blah";
if (getIntent()!=null && getIntent().getExtras()!=null)
Log.d("app", "onResume at " + System.currentTimeMillis() + ":" + getIntent().getExtras().getBoolean(wakeupKey));
else
Log.d("app", "onResume at " + System.currentTimeMillis() + ": null");
}
die getIntent() getExtras() -Aufruf in onResume() immer null zurück - ich scheine nicht in der Lage sein, alle Extras passieren überhaupt durch in diesem. bündeln.
Wenn ich die gleiche Methode verwende, um Extras an den PendingIntent zu binden, der den BroadcastReceiver auslöst, kommen die Extras jedoch gut durch.
Kann mir jemand sagen, was anders ist, wenn ein Bündel von einem BroadcastReceiver an eine Aktivität übergeben wird, statt das Bündel von einer Aktivität an einen BroadcastReceiver zu übergeben? Ich fürchte, ich könnte etwas sehr, sehr offensichtlich falsch hier tun ...
Neugieriger und neugieriger ... es begann gerade arbeiten (im Emulator), genau so, wie ich erwarten würde . Arbeitete wiederholt für ein bisschen. Ich habe den Emulator heruntergefahren, neu gestartet (ohne Codeänderungen oder Neukompilierung) und bin wieder beim alten Verhalten angelangt (Aktivität wird gestartet, aber kein Bundle wurde übergeben). Ich kann Protokolle für beide Läufe immer noch sehen - in der ersten, Bundles kommen durch, in letzterem nicht. –