4 votes

Android notification returns to the wrong activity

Bonjour à tous, Je mets en œuvre une notification dans un service qui, une fois cliquée sur la notification lorsqu'elle apparaît, ouvre une activité. J'ai ce code dans ma classe de service à l'intérieur d'une runnable qui s'exécute en continu toutes les quelques secondes :

NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
            .setSmallIcon(android.R.drawable.ic_dialog_email)
            .setContentTitle(notificationTitle)
            .setContentText(notificationMessage);

    NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();

    builder.setStyle(bigText);

    Intent resultIntent = new Intent(this, openemailactivity.class);

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    builder.setContentIntent(pendingIntent);

    Notification notification = builder.build();
    notification.flags = Notification.FLAG_AUTO_CANCEL;

    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
    notificationManager.notify(0, notification);

Dans mon activité de notification appelée "openemailactivity", j'ai un bouton qui contient un code pour renvoyer l'utilisateur vers l'activité principale appelée "MainActivity" :

btnReturnToMainScreen.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            Intent intent = new Intent(getApplicationContext(), MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
        }
    });

Tout fonctionne bien jusqu'à ce que je redémarre mon téléphone Android, le service se charge au démarrage (comme prévu) et génère une notification, puis lorsque je clique dessus. Ensuite, lorsque je clique dessus, l'activité "openemailactivity" s'ouvre également comme prévu, puis je clique sur le bouton qui ouvre "MainActivity" (le code ci-dessus) et cela fonctionne bien.

Et maintenant le problème commence !

Après que cette autre activité soit ouverte ("MainActivity"), et que la notification apparaisse à nouveau par le service (le minuteur de notification\le contrôle s'exécute dans un Handler\Runnable qui s'exécute en continu) - et lorsque je clique sur la notification elle-même qui a été créée - l'activité qu'elle devrait appeler ("openemailactivity") n'est plus appelée ! à la place - la dernière activité appelée apparaît ("MainActivity"), ce qui est incorrect !

Le problème commence seulement lorsque je redémarre mon téléphone, le service se charge au démarrage, une notification est générée, je clique dessus, elle ouvre la bonne activité, puis j'appelle le code du bouton (OnClickListener).

Je n'ai aucune idée de comment résoudre ce problème.

Que pensez-vous du problème ? Qu'est-ce que je fais de mal et comment puis-je le résoudre ?

Merci pour toute réponse.

0voto

DevTester Points 21

Étrange mais il semble que j'ai trouvé une réponse (Heureusement - Il faut faire plus de tests approfondis car les surprises existent toujours dans cet environnement).

J'ai essayé de définir:

resultIntent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);

dans le code de notification qui existe dans le service, juste après avoir déclaré cette variable (resultIntent).

Pour l'instant, il semble que ça fonctionne ! En regardant la documentation Android pour ce drapeau, il semble qu'il puisse expliquer le problème que j'avais: https://developer.android.com/reference/android/content/Intent.html (Cherchez l'explication de: "FLAG_ACTIVITY_CLEAR_TOP").

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X