AlarmManager und PendingIntent

M

maniac205

Ambitioniertes Mitglied
10
Hallo zusammen,

ich habe ein Problem mit einem AlarmManager, welcher nach einer gewissen Zeit einen PendingIntent abschicken soll.

Was ich machen will:
Ich setze zuerst eine Notification, welcher ein PendingIntent angehängt wird. Das Funktioniert auch.
Code:
/* Nodifikation Anzeigen */
Log.d(tag, "Nodifikation Anzeigen");
PendingIntent startIntent = PendingIntent.getService(mainContext, 0, nodIntent, 0);
					
notification.setLatestEventInfo( mainContext, "Decrypt File", 
fileHelper.getFileName(outFile.getAbsolutePath()), startIntent);

notification.vibrate = new long[] {100, 250};
notificationManager.notify(notificationID, notification);

Soweit so gut.
Im nächsten schritt möchte ich nun einen AlarmManager mit einem anderen PendingIntent erstellen, welcher alle 30Sec ausgeführt wird.

Code:
/* Erstelle Intents */
		Intent scheduleIntent = new Intent(ServiceInfoSec.this,
				ServiceInfoSec.class);
		scheduleIntent.putExtra(INTENT_EXTRA_SERVICE_SCHEDULE_ON, scheduleOn);
		
		alarmPendingIntent = PendingIntent.getService(
				ServiceInfoSec.this, 0, scheduleIntent, 0);
		
		
		/* Setze WakeUp Zeit */
		Calendar calendar = Calendar.getInstance();
		calendar.setTimeInMillis(System.currentTimeMillis());
		calendar.add(Calendar.SECOND, 30); //Alle 30Sec
		
                /*Setze AlarmManager */
		alarmManagerFlag = true;
		alarmManager.set(AlarmManager.RTC_WAKEUP,
				calendar.getTimeInMillis(), alarmPendingIntent);

Nun das eigentliche Problem:
Die Notification funktioniert. Der AlarmManager weitgehend auch. Dummerweise führt er nur den falschen Intent aus. Nach 30Sec wird mein Intent aus der Notification ausgeführt und laut Log kommt der an den AlarmManager gehangene Intent gar nicht zur Ausführung.

Was mache ich falsch?


Schon mal danke für eure Antworten.

Grüße
Maniac
 
Zuletzt bearbeitet:
Hi,
du gibt dem getService am PendingIntent in beiden Fällen einen requestCode von 0 mit. In der Doku steht zwar der wird nicht benutzt, das ist aber de fakto falsch (habe es auprobiert). Ein neues PendingIntent mit gleichen RequestCode überschreibt das alte PendingIntent. Also vergib einen anderen eindeutigen requestCode.
Zusätzlich solltest du als letzten Parameter eine der FLAG_* Konstanten aus PendingIntent angeben, statt 0. Zum Beispiel FLAG_ONE_SHOT falls das Intent nur einmal ausgeführt werden muss, ansonsten FLAG_UPDATE_CURRENT. Ich bin mir gerade nicht mehr sicher was Standard ist.

mfg
David
 
  • Danke
Reaktionen: maniac205
Vielen Dank für die Info! Werde das gleich einmal ausprobieren!

Hat funktioniert! Danke!
 
Zuletzt bearbeitet:

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
128
swa00
swa00
Laser5001
Antworten
3
Aufrufe
650
swa00
swa00
W
Antworten
2
Aufrufe
744
rene3006
R
Zurück
Oben Unten