Android continue de mettre en cache mes intentions Extras, comment déclarer une intention en attente qui garde de nouveaux extras?

Il y a quelques jours, je cherchais un moyen d'utiliser des intentions personnalisées pour mes alarmes. Bien que j'ai obtenu une réponse claire, je dois personnaliser les Intents en fonction d'une identification unique par exemple. setAction() toujours des problèmes.

Je définis un PendingIntent de cette façon:

  • Type de mime vidéo Android HLS
  • Actualisez-vous la Galerie après avoir supprimé un fichier image?
  • Résultat d'intention de retour lorsque l'activité est fermée par le bouton de retour
  • Android: BroadcastReceiver intention de détecter la photo de caméra prise?
  • Envoi de pause au composeur
  • Vérifier la connexion Internet INTENT
  •  Intent intent = new Intent(this, viewContactQuick.class); intent.setAction("newmessage"+objContact.getId());//unique per contact intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK ).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP ); intent.putExtra("id", Long.parseLong(objContact.getId())); intent.putExtra("results", result.toArray()); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0); 

    Alors cela est utilisé par un gestionnaire de notification

     NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns); // first try to clear any active notification with this contact ID mNotificationManager.cancel(Integer.parseInt(objContact.getId())); // then raise a new notification for this contact ID mNotificationManager.notify(Integer.parseInt(objContact.getId()), notification); 

    Cela fonctionne comme ceci:

    • L'application crée un message pour un contact
    • Une intention est fournie avec l'identifiant de contact et les détails sur le message
    • La notification est soulevée avec le message
    • Les actions de l'utilisateur sur la notification et l'application affiche le message passé par l'intention

    Le problème

    Cela peut se produire plus d'une fois pour un contact. Et lorsque le deuxième message est généré, la notification est bien créée (le message est bien là), mais l'intention lorsque l'utilisateur actionne la notification qu'elle utilise des anciennes données, de sorte que le message précédent est transmis et non le tout nouveau message.

    De toute façon, l'intention est de mettre en cache et de réutiliser les précédents extras. Comment puis-je le rendre unique par contact et par action?

  • Comment établir une communication bidirectionnelle entre Activité et Service dans différents processus?
  • Type MIME pour les répertoires dans Android
  • Java.lang.IllegalStateException: l'application PagerAdapter a changé le contenu de l'adaptateur sans appeler PagerAdapter # notifyDataSetChanged android
  • Comment animer le changement d'un gestionnaire de mise en page de la vue du recycleur
  • Fb: // profile / {userid} semble ne pas fonctionner
  • Est-il possible de définir un délai maximal autorisé pour l'enregistrement Android avec l'intention?
  • 2 Solutions collect form web for “Android continue de mettre en cache mes intentions Extras, comment déclarer une intention en attente qui garde de nouveaux extras?”

    Si seulement un de vos PendingIntents pour ce contact sera en circulation à tout moment, ou si vous souhaitez toujours utiliser le dernier ensemble d'extras, utilisez FLAG_UPDATE_CURRENT lorsque vous créez PendingIntent .

    Si plus d'un PendingIntent spécifique au PendingIntent sera en circulation à la fois, et qu'ils doivent avoir des extras distincts, vous devrez ajouter un compte ou un timestamp ou quelque chose pour les distinguer.

     intent.setAction("actionstring" + System.currentTimeMillis()); 

    METTRE À JOUR

    En outre, le deuxième paramètre légèrement documenté pour getActivity() et kin sur PendingIntent apparemment peut être utilisé pour créer des objets PendingIntent distincts pour la même Intent sous-jacente, même si je n'ai jamais essayé cela.

    Je spécifie habituellement un code de demande unique pour éviter que mes PendingIntents ne se remplacent mutuellement:

     PendingIntent pending = PendingIntent.getService(context, unique_id, intent, 0); 

    Et dans votre cas, je suis d'accord avec Commons. Vous avez juste besoin du drapeau FLAG_UPDATE_CURRENT. De nouveaux extras annuleront les anciennes valeurs.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.