2012-02-09 15 views
19

Cuando creo una notificación que se envía a través de C2DM y recibo en mi aplicación, deseo pasar algunos de los datos que vienen con la notificación de inserción de C2DM en el extras de intención. Esto funciona bien la primera vez que abro mi notificación. Luego, los datos se reciben con onNewIntent o onCreate dependiendo del estado de la actividad.Notificaciones de barra de estado de Android: intento de obtener los extras anteriores por segunda vez

Pero si envío una segunda notificación de inserción a través de C2DM, se recibe correctamente con los datos nuevos, pero al obtener los extras de la intención, sigo recibiendo los datos del mensaje anterior. El título y los datos que deseo ver se muestran correctamente en la notificación. Entonces algo debe estar mal, mi intención. Esto sucede si la actividad se está ejecutando y si no lo está.

Para crear la notificación hago lo siguiente:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
Notification notification = new Notification(R.drawable.ic_stat_notify_push, "Message received", System.currentTimeMillis()); 
notification.flags |= Notification.FLAG_AUTO_CANCEL; 
notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
notification.defaults |= Notification.DEFAULT_LIGHTS; 
Intent intent = new Intent(context, DesktopApp.class); 
intent.setAction("android.intent.action.MAIN"); 
intent.addCategory("android.intent.category.LAUNCHER"); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent.putExtra("msg_id", msg_id); 
intent.putExtra("title", title); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
notification.setLatestEventInfo(context, "New message", title + String.valueOf(msg_id), pendingIntent); 
notificationManager.notify(0, notification); 

Para leer a continuación, los intentos:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Intent myIntent = getIntent(); // this is just for example purpose 
    int i = myIntent.getIntExtra("msg_id", -1); 
    if (i != -1) Toast.makeText(this, "Got message! " + String.valueOf(i), Toast.LENGTH_LONG).show(); 
} 


@Override 
public void onNewIntent(Intent intent){ 
    super.onNewIntent(intent); 
    Bundle extras = intent.getExtras(); 
    if (extras != null) { 
     int i = extras.getInt("msg_id", -1); 
     if (i != -1) Toast.makeText(this, "Got message! " + String.valueOf(i), Toast.LENGTH_LONG).show(); 
    } 
} 

¿Alguna sugerencia?

+0

gracias onNewIntent() a resolver mi problema :) – SAndroidD

Respuesta

37

Usted necesitará configurar una bandera limpia para PendingIntent:

PendingIntent pintent = 
    PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_CANCEL_CURRENT); 

Tener una mirada at this post que da una explicación más larga.

5

Utilice este método

PendingIntent pi = PendingIntent.getActivity(context, UNIQUE_ID, 
    intent, PendingIntent.FLAG_UPDATE_CURRENT); 
Cuestiones relacionadas