2010-09-16 2 views
13

Ich füge meinem Programm einige grundlegende Alarmfunktionen hinzu, indem ich AlarmManager und eine BroadcastReceiver-Klasse (AReceiver.java) verwende. Mein Problem ist, dass die Daten, die ich zu dem Bündel hinzufüge, das an die Absicht angehängt ist, die den PendingIntent erzeugt, verloren gehen. Die einzigen Paketdaten, auf die ich in der AReceiver-Klasse zugreifen kann, sind android.intent.extra.ALARM_COUNT = 1. HierFehler beim Senden des Bundles mit PendingIntent an einen Broadcast-Empfänger, Datenverlust

ist der grundlegende Code in der Hauptaktivitätsklasse der Intention zu schaffen, PendingIntent und der Alarmmanager: [Code in Haupttätigkeit - Notepadv3]

Intent intent = new Intent(Notepadv3.this, AReceiver.class);   
intent.putExtra("teststring","hello, passed string in Extra");    
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, pendingPeriodIntentId, intent, 0);  
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);   
am.set(AlarmManager.RTC_WAKEUP, timeOfNextPeriod.getTimeInMillis(), alarmIntent); 

[Code im BroadcastReceiver - AReceiver]

public void onReceive(Context con, Intent arg1) { 
Bundle extrasBundle = arg1.getExtras(); 
Log.d("broadcast","contains teststring = " + extrasBundle.containsKey("teststring")); 
Log.d("broadcast","is empty? = " + extrasBundle.isEmpty()); 
Log.d("broadcast","to string = " + extrasBundle.toString()); 
    } 

Debug-Nachrichten sagen, dass testetstring ist FALSE, ist leer ist FALSE und bei der Ausgabe des gesamten Pakets, bekomme ich den android.intent.extra.ALARM_COUNT = 1 Wert.

Jede Hilfe würde sehr geschätzt werden.

Cheers, Tom

Antwort

33

Sie haben diese Linie

PendingIntent alarmIntent = PendingIntent.getBroadcast(this, pendingPeriodIntentId, intent, 0); 
ist

in diesem

PendingIntent alarmIntent = PendingIntent.getBroadcast(this, pendingPeriodIntentId, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

sonst die Daten

+0

verloren Danke zu ändern! Das war die Lösung, ich hatte hoch und niedrig gesucht, um die richtigen Parameter zu finden. Danke noch einmal. –

+0

seltsam, auf Android 4.0.3 Emulator funktioniert es mit beiden 0 und PendingIntent.FLAG_UPDATE_CURRENT – max4ever

+2

ABER ... wenn Sie das letztere tun, überschreibt es alle * vorhandenen * Extras. Das heißt, wenn wir neue Extras hinzufügen UND das vorhandene behalten wollen, funktioniert es nicht. Normalerweise bewirkt das Übergeben von 0 als Flags, dass dies funktioniert (z. B. wenn send auf dem PendingIntent aufgerufen wird, anstatt es mit AlarmManager zu planen). Was gibt? – Michael