2010-09-16 9 views
13

Dodaję do mojego programu pewne podstawowe funkcje alarmowe za pomocą AlarmManagera i klasy BroadcastReceiver (o nazwie AReceiver.java). Mój problem polega na tym, że dane, które dodaję do pakietu dołączonego do Intencji tworzącego PendingIntent, wydają się być utracone. Jedyne dane pakietu, do których mogę uzyskać dostęp w klasie AReceiver, to Android.intent.extra.ALARM_COUNT = 1.Problem z wysłaniem pakietu z PendingIntent do odbiornika Broadcast, utracone dane

Oto kod podstawowy w głównym stopień aktywności tworzenia zamiarach, PendingIntent i AlarmManager: [kodu w główny - 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); 

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

Komunikaty debugowania mówią, że zawiera łańcuch testowy ma wartość FALSE, puste jest FAŁSZ, a podczas wysyłania całego pakietu otrzymuję wartość android.intent.extra.ALARM_COUNT = 1.

Każda pomoc zostanie bardzo doceniona.

Cheers, Tom

Odpowiedz

33

Trzeba zmienić ten wiersz

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

w tym

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

przeciwnym razie dane zostaną utracone

+0

Dziękujemy! To była poprawka, szukałem wysokich i niskich wartości, by uzyskać odpowiednie parametry. Dzięki jeszcze raz. –

+0

Dziwne, na emulatorze Androida 4.0.3 działa zarówno z 0, jak i PendingIntent.FLAG_UPDATE_CURRENT – max4ever

+2

ALE ... kiedy robisz to ostatnie, OVERWRITES * istniejących * statystów. To znaczy, jeśli chcemy dodać nowe dodatki I zachować istniejące, to nie działa. Normalnie przekazanie 0 jako flag powoduje, że to działa (np. Jeśli wywołanie jest wysyłane w PendingIntent zamiast planowania go za pomocą AlarmManager). Co daje? – Michael

Powiązane problemy