Il y a quelques jours, j'avais du mal à trouver un moyen d'utiliser des intentions personnalisées pour mes alarmes. Bien que j'ai obtenu une réponse claire, je dois personnaliser les intentions en fonction d'un ID unique, par exemple. setAction()
ont encore quelques problèmes.Android conserve la mise en cache de mes intentions Extras, comment déclarer une intention en attente qui conserve les frais supplémentaires?
Je définis PendingIntent cette façon:
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 il 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 une contact
- une intention est fournie wit h l'identifiant de contact et les détails sur le message notification
- est soulevée avec le message
- actiones utilisateur sur la notification et l'application affiche le message transmis par l'intention
Le problème
Cela peut arriver plus d'une fois pour un contact. Et quand le deuxième message est généré, la notification est bien levée (le message y est bon) mais l'intention quand l'utilisateur actionne la notification qu'il utilise des anciennes données, donc le message précédent est passé et non le tout nouveau message.
Donc, de toute façon, l'intention est la mise en cache et la réutilisation des extras précédents. Comment puis-je le rendre unique par contact et par action?
Existe-t-il un moyen d'effacer tous les IntentExtras en cache? Je suppose que je l'ai corrigé maintenant, mais les intentions plus anciennes en cache restent ... – OneWorld
Un problème similaire peut survenir en fonction des indicateurs de l'intention ou du mode de lancement d'une activité.Dans ce cas, vous devrez cocher [Activity :: onNewIntent] (http://j.mp/ieXMCA), car Activity :: getIntent retournera l'intention ORIGINAL de l'activité, pas la nouvelle intention avec l'action/les extras mis à jour /etc. – brack