23

Ich habe ein Problem mit alarmManager und die ausstehende Absicht mit Extras, die damit einhergehen werden.Wie kann ich einzigartige Extras korrekt an eine ausstehende Absicht weitergeben?

Wenn ich mehrere Alarme einstelle, gehen diese aus, die Extras bleiben jedoch gleich.

Ich habe bereits in diese Fragen lesen:

und ich habe versucht:

  • eine eindeutige ID für jede ausstehende Absicht zuweisen und
  • mit allen ausstehenden Absicht Flags,

alles vergebens. Ich habe keine Ahnung, warum es nicht funktionieren wird.

ist hier ein Code-Schnipsel:

Intent intent = new Intent(con, 
        AppointmentNotificationReciever.class); 
      intent.putExtra("foo", bar.toString()); 


      int id = randomNum; 

      PendingIntent sender = PendingIntent.getBroadcast(con, id, 
        intent, PendingIntent.FLAG_UPDATE_CURRENT); 


      AlarmManager am = (AlarmManager) con.getSystemService(Context.ALARM_SERVICE); 
      am.set(AlarmManager.RTC_WAKEUP, scheduleExecution, sender); 

Antwort

66

Möglicherweise zwei verschiedene Dinge hier :

1) Wenn Sie bereits Ihren PendingIntent erstellt haben und dieser mit einem vorhandenen PendingIntent "übereinstimmt", müssen Sie das Flag PendingIntent.FLAG_UPDATE_CURRENT angeben oder die Extras nicht bestehen. Eine "Übereinstimmung" basiert auf den Kriterien, die Intent.filterEquals() verwendet, also lesen Sie die Dokumente auf jeden Fall und vergewissern Sie sich, dass Sie die Daten, Aktionen, Typen usw. verstehen.

2) Ich habe das gelesen, wenn Sie Setzen Sie KEINE Aktion auf Ihre Absicht, dann werden die Extras nicht weitergegeben, also versuchen Sie vielleicht intent.setAction ("com.blah.Action").

+0

In meiner anhängigen Absicht Ich versuche, den PendingIntent.FLAG_UPDATE_CURRENT zu setzen, aber jetzt, wenn die Absicht genannt wird, erhalte ich eine Fehlermeldung wie „java.lang.IllegalArgumentException: Kann nicht FLAG_RECEIVER_BOOT_UPGRADE verwendet hier“ - keine Ahnung, obwohl, wo dieses BOOT Flagge kommt von, alles, was ich wa FLAG_UPDATE_CURRENT hinzugefügt habe. Hattest du schon früher ein ähnliches Problem? (Ich bin auf Huawei Ideos, 2.2) –

+3

Eine Aktion in der Tat löste mein Problem, danke! – shawkinaw

+0

Setaction war gut für mich .. das gleiche Problem – catalin87

2

Dies aufgrund Aktivität sein könnte :: getIntent die Tätigkeit der ursprüngliche Absicht gegeben bestimmte Absicht Fahnen/Filter zurück.

Wenn das der Fall für Sie ist, müssen Sie sich ansehen Activity::onNewIntent. Überschreiben Sie diese Methode, und die Absicht, diese Funktion übergeben sollte die neue Absicht mit der richtigen Extras usw. sein

Kredit geht auf diese Frage SO, die mir geholfen, mein Problem zu lösen: Why is my searchable activity's Intent.getAction() null?

11

Ich bin auf ein ähnliches Problem gestoßen. Die Verwendung von PendingIntent.FLAG_ONE_SHOT kann das Problem lösen, da die PendingActivity nicht wiederverwendet wird.