Mon MainActicity
commence RefreshService
avec un Intent
qui dispose d'un boolean
supplémentaire appelé isNextWeek
.
Mon RefreshService
fait un Notification
qui démarre mon MainActivity
lorsque l'utilisateur clique dessus.
cela ressemble à ceci :
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);
Comme vous pouvez le constater, la notificationIntent
devrait avoir le boolean
supplémentaire IS_NEXT_WEEK
avec la valeur de isNextWeek
qui est placé dans le PendingIntent
.
Lorsque je clique sur "maintenant", ceci Notification
Je reçois toujours false
comme valeur de isNextWeek
C'est ainsi que j'obtiens la valeur dans le champ MainActivity
:
isNextWeek = getIntent().getBooleanExtra(IS_NEXT_WEEK, false);
Journal :
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
Lorsque je démarre directement le MainActivity
avec un Intent
avec la ìsNextValue` comme ceci :
Intent i = new Intent(this, MainActivity.class);
i.putExtra(IS_NEXT_WEEK, isNextWeek);
finish();
startActivity(i);
tout fonctionne bien et j'obtiens true
quand isNextWeek
es true
.
Qu'est-ce qui me fait dire qu'il y a toujours un false
valeur ?
MISE À JOUR
cela résout le problème : https://stackoverflow.com/a/18049676/2180161
Citation :
Je soupçonne que, puisque la seule chose qui change dans la les extras, le
PendingIntent.getActivity(...)
f est simplement la réutilisation de l'ancienne intention comme une optimisation.Dans RefreshService, essayez :
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
Voir :
http://developer.Android.com/reference/Android/app/PendingIntent.html#FLAG_CANCEL_CURRENT
MISE À JOUR 2
Véase réponse ci-dessous pourquoi il est préférable d'utiliser PendingIntent.FLAG_UPDATE_CURRENT
.
2 votes
PendingIntent.FLAG_CANCEL_CURRENT a fonctionné pour moi, merci.
1 votes
M'a permis d'économiser de nombreuses heures de travail. bonne réponse !
0 votes
Vous avez la question et la solution :D génial. Je pense que vous devriez l'ajouter comme réponse à la question. +10s est mieux que +5s ;)
0 votes
Référence à cette solution : stackoverflow.com/questions/1198558/
0 votes
Le FLAG_UPDATE_CURRENT ne suffisait pas dans mon cas, puisque le même PendingIntent était réutilisé par mon widget. J'ai fini par utiliser FLAG_ONE_SHOT pour l'action qui se produit rarement, et j'ai laissé le PendingIntent du widget intact.