Mi MainActicity comienza RefreshServicecon un Intentque tiene un booleanextra llamadoisNextWeek .
Mi RefreshServicehace un Notificationque inicia mi MainActivitycuando el usuario hace clic en él.
esto se ve así:
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);
Como puede ver, notificationIntentdebe tener el booleanextra IS_NEXT_WEEKcon el valor del isNextWeekcual se coloca en el PendingIntent.
Cuando hago clic en esto Notification, siempre obtengo el falsevalor deisNextWeek
Esta es la forma en que obtengo el valor en MainActivity:
isNextWeek = getIntent().getBooleanExtra(IS_NEXT_WEEK, false);
Iniciar sesión:
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
Cuando empiezo directamente MainActivitycon un Intentcon el "Valor siguiente" de esta manera:
Intent i = new Intent(this, MainActivity.class);
i.putExtra(IS_NEXT_WEEK, isNextWeek);
finish();
startActivity(i);
todo funciona bien y me sale truecuando isNextWeekestá true.
¿Qué hago mal que siempre hay un falsevalor?
ACTUALIZAR
Esto resuelve el problema: https://stackoverflow.com/a/18049676/2180161
Citar:
Mi sospecha es que, dado que lo único que cambia en la intención son los extras, el
PendingIntent.getActivity(...)método de fábrica es simplemente reutilizar la intención anterior como una optimización.En RefreshService, intente:
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);Ver:
http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT
ACTUALIZACIÓN 2
Vea la respuesta a continuación por qué es mejor usarlo PendingIntent.FLAG_UPDATE_CURRENT.