web-dev-qa-db-fra.com

android en attente de problème de notification d'intention

J'ai une alarme en cours dans mon application qui lance une notification qui, une fois enfoncée, lance une activité .. Le problème est que, lorsque je crée plusieurs alarmes, l'activité lancée à partir de la notification reçoit les mêmes extras que le Premier. Je pense que le problème est soit avec l'intention que j'ai mise dans l'intention en attente ou dans l'intention en attente elle-même. Je pense que je pourrais avoir besoin de mettre un drapeau sur l'un de ceux-ci mais je ne sais pas lequel.

Intent showIntent =new Intent(context, notificationreceiver.class);
    showIntent.putExtra("details", alarmname);

PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
        showIntent, 0); 

    notification.setLatestEventInfo(context, "The event is imminent",
            alarmname, contentIntent);

Et le destinataire de la notification

Bundle b = getIntent().getExtras();
    String eventname = b.getString("details");
    details.setText(eventname);

Les "détails" supplémentaires sont identiques à chaque fois qu'une notification est émise au lieu d’avoir la valeur différente . Tant que je n’ai pas défini les intentions, je suis sûr que la valeur correcte est affectée aux "détails", c’est un problème d’obtention de la première intention chaque fois que j'appuie sur une notification . Comment puis-je faire pour lancer les intentions correctes? J'espère être aussi clair que possible Merci!

72
spagi

Le problème est que lorsque je crée plus puis une alarme puis l'activité lancé à partir de la notification obtient les mêmes extras que le premier.

Correct.

Comment puis-je le faire pour lancer le bonnes intentions?

Cela dépend si vous avez deux alarmes qui seront enregistrées à la fois ou non.

Sinon, vous pouvez utiliser FLAG_ONE_SHOT ou l'un des autres drapeaux PendingIntent pour que votre deuxième PendingIntent utilise les suppléments les plus récents.

Si, toutefois, vous avez deux alarmes enregistrées à la fois, avec des extras Intent différents, vous devrez faire en sorte que les deux Intents soient plus matériellement différents, de sorte que filterEquals() renvoie false lorsque vous comparez les deux. Par exemple, vous pouvez appeler setData() ou setAction() et fournir des valeurs différentes pour chaque Intent.

68
CommonsWare

J'ai résolu ce problème en assignant un unique requestCode lorsque vous obtenez le PendingIntent:

PendingIntent.getActivity(context, requestCode, showIntent, 0); 

En procédant de la sorte, vous vous inscrivez auprès du système avec différentes instances/intentions d'intention . Conseil: Un bon moyen de rendre le requestCode unique serait de lui passer l'heure système actuelle.

int requestID = (int) System.currentTimeMillis();
116
u-ramos

une autre solution:

utilisez le PendingIntent.FLAG_UPDATE_CURRENT comme ceci:

PendingIntent contentIntent = PendingIntent.getActivity(this, 0,i, PendingIntent.FLAG_UPDATE_CURRENT);

cela a fonctionné pour moi

0
Abeer Sul

J'avais ce problème dans mon application et je venais de générer un nombre aléatoire afin de dépasser les intentions de notification:

int random= new Random().nextInt();
PendingIntent resultPendingIntent =
      stackBuilder.getPendingIntent(
              random,
              PendingIntent.FLAG_UPDATE_CURRENT
      );
0
bsh