Notification de passe ancien Intention Extras
je suis de la création d'une notification à l'intérieur d'un BroadcastReceiver par l'intermédiaire de ce code:
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns);
int icon = R.drawable.ic_stat_notification;
CharSequence tickerText = "New Notification";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
notification.defaults |= Notification.DEFAULT_VIBRATE;
long[] vibrate = {0,100,200,200,200,200};
notification.vibrate = vibrate;
notification.flags |= Notification.FLAG_AUTO_CANCEL;
CharSequence contentTitle = "Title";
CharSequence contentText = "Text";
Intent notificationIntent = new Intent(context, NotificationActivity.class);
notificationIntent.putExtra(Global.INTENT_EXTRA_FOO_ID, foo_id);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
int mynotification_id = 1;
mNotificationManager.notify(mynotification_id, notification);
Quand je clique sur la notification, il ouvre le NotificationActivity et à l'intérieur de l'Activité, je peux récupérer le foo_id de l'Intention de l'-Bundle (par exemple: 1)
Toutefois, si un autre notification est déclenchée et que je clique sur nouveau, l'activité reçoit encore les "vieux" de la valeur (1) de l'Intention de l'-Bundle. J'ai essayé d'effacer le bundle avec clear(), mais je reçois le même effet. Je pense que qqch est le problème avec mon code..
- s'il vous plaît pouvez-vous me dire comment obtenir les données de l'attente de l'intention
- pour réaliser que c'était l'envoi de vieux extras, fait mon tri plus facile.
InformationsquelleAutor BrianM | 2011-09-10
Vous devez vous connecter pour publier un commentaire.
Vous envoyer le même code de la demande pour l'attente de votre intens.
Modifiez ce qui suit:
À:
les intentions ne sont pas créés si vous envoyez le même params. Ils sont réutilisés.
Intent
que a différentes extras (viaputExtra
) sont considérés de la même manière et ré-utilisé parce que je n'ai pas fournir un identifiant unique pour certains, l'attente d'intention d'appel terrible apiAlternativement, vous pouvez utiliser le code suivant pour générer votre PendingIntent:
De la doc pour
PendingIntent.FLAG_UPDATE_CURRENT
:Vous êtes de passage le même ID. Dans ce genre de situation, faire une id unique à partir de ce moment-ci:
Et le mettre comme ceci:
requestId
paramètre dePendingIntent.getActivity()
prend un int.0xffffffff
est un masque de bits. Bien qu'il y ait un peu plus à lui, l'explication simple est que de faire "long & 0xffffffff' donne le plus bas 32-bits de long et les rejets les plus élevés de 32 bits, vous laissant avec essentiellement une version 32 bits de type int. C'est mieux que de simplement un casting pour un int car il ne sera pas la boue jusqu'le bit de signe (si vous avez jeté un long qui est plus gros qu'un int int le bit de signe débordement et vous aurez potentiellement le vent jusqu'à une valeur négative)Pour ceux qui recherchent la meilleure approche, après un long temps de tous vous avez besoin pour passer le PendingIntent.FLAG_UPDATE_CURRENT comme le dernier argument comme indiqué ci-dessous
vous n'avez même pas besoin de fournir de nouvelles id unique.
Votre demande de code est 0 pour tous les avis. Modifier la ligne suivante:
Avec: