2010-09-16 12 views
13

Estoy agregando algunas funcionalidades básicas de alarma a mi programa a través del uso de AlarmManager y una clase BroadcastReceiver (llamada AReceiver.java). Mi problema es que los datos que agrego al paquete adjunto al Intento que crea el PendingIntent parecen estar perdidos. Los únicos datos del paquete a los que puedo acceder en la clase AReceiver son un android.intent.extra.ALARM_COUNT = 1.Problema al enviar un paquete con PendingInntente a un Broadcast Receiver, pérdida de datos

Este es el código básico en la clase principal actividad de la creación de la Intención, PendingIntent y la AlarmManager: [Código de actividad - 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); 

[Código en el 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()); 
    } 

Los mensajes de depuración dicen que contiene la cadena de pruebas es FALSA, está vacía es FALSA y al generar todo el paquete, obtengo el valor android.intent.extra.ALARM_COUNT = 1.

Cualquier ayuda sería muy apreciada.

Cheers, Tom

Respuesta

33

usted tiene que cambiar esta línea

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

en este

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

de lo contrario los datos se pierden

+0

Gracias! Esa era la solución, había buscado alto y bajo para obtener los parámetros correctos. Gracias de nuevo. –

+0

extraño, en el emulador de Android 4.0.3 funciona tanto con 0 como con PendingIntent.FLAG_UPDATE_CURRENT – max4ever

+2

PERO ... cuando haces esto último, sobrescribe los extras * existentes *. Es decir, si queremos agregar nuevos extras Y retener el existente, no funciona. Normalmente, pasar 0 como banderas hace que esto funcione (por ejemplo, si se llama a enviar en PendingIntent en lugar de programarlo con AlarmManager). ¿Lo que da? – Michael

Cuestiones relacionadas