2010-09-16 8 views
13

Aggiungo alcune funzionalità di allarme di base al mio programma tramite l'utilizzo di AlarmManager e una classe BroadcastReceiver (denominata AReceiver.java). Il mio problema è che i dati che aggiungo al pacchetto collegato all'intento che crea PendingIntent sembrano essere persi. Gli unici dati bundle a cui posso accedere nella classe AReceiver sono android.intent.extra.ALARM_COUNT = 1.Problemi nell'invio di pacchetti con PendingIntent a un destinatario Broadcast, dati persi

ecco il codice di base nella classe principale attività creando l'Intento, PendingIntent e l'AlarmManager: [Codice in attività - 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); 

[Codice in 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()); 
    } 

I messaggi di debug dicono che contiene teststring è FALSE, è vuoto è FALSE e quando si trasmette l'intero pacchetto, ottengo il valore android.intent.extra.ALARM_COUNT = 1.

Qualsiasi aiuto sarebbe molto apprezzato.

Cheers, Tom

risposta

33

è necessario modificare questa linea

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

in questo

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

altrimenti i dati vengono persi

+0

Grazie! Questa era la soluzione, avevo cercato in alto e in basso per ottenere i parametri corretti. Grazie ancora. –

+0

strano, su Android 4.0.3 emulatore funziona con entrambi 0 e PendingIntent.FLAG_UPDATE_CURRENT – max4ever

+2

MA ... quando si esegue quest'ultima, SOVRAVOGLIA eventuali extra * esistenti *. Significato se vogliamo aggiungere nuovi extra E mantenere quello esistente, non funziona. Normalmente il passaggio a 0 come flag fa sì che ciò funzioni (ad es. Se si chiama send su PendingIntent invece di programmarlo con AlarmManager). Cosa dà? – Michael

Problemi correlati