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
Grazie! Questa era la soluzione, avevo cercato in alto e in basso per ottenere i parametri corretti. Grazie ancora. –
strano, su Android 4.0.3 emulatore funziona con entrambi 0 e PendingIntent.FLAG_UPDATE_CURRENT – max4ever
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