Il mio MainActicity
inizia RefreshService
con un Intent
che ha un boolean
extra chiamato isNextWeek
.
La mia RefreshService
crea una Notification
che inizia alla mia MainActivity
quando l'utente fa clic su di essa.
questo assomiglia a questo:
Log.d("Refresh", "RefreshService got: isNextWeek: " + String.valueOf(isNextWeek));
Intent notificationIntent = new Intent(this, MainActivity.class);
notificationIntent.putExtra(MainActivity.IS_NEXT_WEEK, isNextWeek);
Log.d("Refresh", "RefreshService put in Intent: isNextWeek: " + String.valueOf(notificationIntent.getBooleanExtra(MainActivity.IS_NEXT_WEEK,false)));
pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
builder = new NotificationCompat.Builder(this).setContentTitle("Title").setContentText("ContentText").setSmallIcon(R.drawable.ic_notification).setContentIntent(pendingIntent);
notification = builder.build();
// Hide the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(NOTIFICATION_REFRESH, notification);
Come puoi vedere, notificationIntent
dovrebbe avere un boolean
extra IS_NEXT_WEEK
con il valore di isNextWeek
cui è inserito in PendingIntent
.
Quando faccio clic ora, Notification
ottengo sempre false
il valore diisNextWeek
Questo è il modo in cui ottengo il valore in MainActivity
:
isNextWeek = getIntent().getBooleanExtra(IS_NEXT_WEEK, false);
log:
08-04 00:19:32.500 13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity sent: isNextWeek: true
08-04 00:19:32.510 13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService got: isNextWeek: true
08-04 00:19:32.510 13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService put in Intent: isNextWeek: true
08-04 00:19:41.990 13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity.onCreate got: isNextWeek: false
Quando inizio direttamente MainActivity
con un Intent
con "NextValue" in questo modo:
Intent i = new Intent(this, MainActivity.class);
i.putExtra(IS_NEXT_WEEK, isNextWeek);
finish();
startActivity(i);
tutto funziona bene e ottengo true
quando lo isNextWeek
è true
.
Cosa faccio di sbagliato che c'è sempre un false
valore?
AGGIORNARE
questo risolve il problema: https://stackoverflow.com/a/18049676/2180161
Citazione:
Il mio sospetto è che, poiché l'unica cosa che cambia negli Intenti sono gli extra, il
PendingIntent.getActivity(...)
metodo di fabbrica sta semplicemente riutilizzando il vecchio intento come ottimizzazione.In RefreshService, prova:
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
Vedere:
http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT
AGGIORNAMENTO 2
Vedi la risposta qui sotto perché è meglio usare PendingIntent.FLAG_UPDATE_CURRENT
.