Je développe une application qui affiche une notification à l'utilisateur. L'objectif de la notification est de permettre à l'utilisateur de revenir facilement à l'activité lorsqu'il est dans une autre activité. J'utilise ce code dans mon application pour créer et afficher la notification.
notification = new Notification(R.drawable.icon,
"Notify",
System.currentTimeMillis());
notification.setLatestEventInfo(this, "App name",
"App message",
PendingIntent.getActivity(
this, 0,
new Intent(this, Main.class),
PendingIntent.FLAG_CANCEL_CURRENT));
notification.flags |= Notification.FLAG_ONGOING_EVENT;
nManager.notify(0, notification);
Mais lorsque l'utilisateur appuie sur la notification, une nouvelle instance de la même activité est lancée, au lieu de celle que l'utilisateur utilisait auparavant.
Je pense que cela a quelque chose à voir avec PendingIntent mais je ne trouve pas comment faire pour que cet Intention reprenne une instance de l'activité précédemment suspendue au lieu de créer une nouvelle instance.
Merci.
J'ai découvert comment faire. J'ai ajouté le code suivant:
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
Maintenant, mon code ressemble à ceci:
notification = new Notification(R.drawable.icon,
"Notify", System.currentTimeMillis());
notification.setLatestEventInfo(this, "App name",
"App message", PendingIntent.getActivity(this,
0, new Intent(this, Main.class)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP),
PendingIntent.FLAG_CANCEL_CURRENT));
notification.flags |= Notification.FLAG_ONGOING_EVENT;
Cela aide pour moi Android:launchMode="singleInstance"
<activity
Android:name="com.mosis.automatskidnevnik.MainActivity"
Android:launchMode="singleInstance"
Android:label="@string/app_name" >
...
J'ai résolu le même problème en mettant
Android:launchMode="singleTask"
Mis à part la réponse correcte de @Jimix, je changerais la PendingIntent
requestCode
de 0 à un non nul valeur comme commenté sur un autre réponse . D'autre part, il y a un bug connu sur les versions précédentes d'Android qui m'a pris quelques heures désespérées. La solution proposée a bien fonctionné pour moi en annulant la PendingIntent
avant d'envoyer la notification:
if (Build.VERSION.SDK_INT == 19) {
getNotificationPendingIntent().cancel();
}
Lors de la création de votre PendingIntent, vous utilisez:
Main.this.getBaseContext ()
Vous devez utiliser le contexte d'activité par défaut si vous souhaitez revenir à la même activité. Lire la suite ici:
Android - Quelle est la différence entre les différentes méthodes pour obtenir un contexte?