Quando creo una notifica inviata tramite C2DM e ricevuta nella mia app, voglio passare alcuni dei dati forniti con la notifica push da C2DM nel intenti extra. Funziona bene la prima volta che apro la mia notifica. Quindi i dati vengono ricevuti con onNewIntent o in onCreate a seconda dello stato dell'attività.Notifiche della barra di stato Android - Intenzione di ottenere i vecchi extra la seconda volta
Ma se invio una seconda notifica push tramite C2DM, questa viene ricevuta correttamente con i nuovi dati, ma quando ottengo gli extra dall'intento, ottengo ancora i dati dal messaggio precedente. Il titolo e i dati che voglio vedere sono visualizzati correttamente nella notifica. Quindi qualcosa deve essere sbagliato nel mio intento. Questo succede se l'attività è in esecuzione e se non lo è.
Per creare la notifica faccio la seguente:
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);
Per poi leggere gli intenti:
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();
}
}
Qualche suggerimento?
grazie onNewIntent() risolvere il mio problema :) – SAndroidD