Hace unos días estaba luchando por encontrar una forma de usar intenciones personalizadas para mis alarmas. Aunque obtuve una respuesta clara, tengo que personalizar los Intents basados en alguna identificación única, por ej. setAction()
todavía tienen algunos problemas.Android mantiene en el caché mis intenciones Extras, ¿cómo declarar un intento pendiente que mantiene nuevos extras?
defino un PendingIntent esta manera:
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);
entonces este es utilizada por un gestor de notificaciones
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);
Esto funciona así:
- aplicación crea un mensaje para una contacto
- se proporciona una intención ingenio h el ID de contacto y detalles sobre el mensaje
- notificación se eleva con el mensaje
- usuario actiones en la notificación y la aplicación muestra el mensaje que se transmite por la intención
El problema
Esto puede suceder más de una vez por un contacto. Y cuando se genera el segundo mensaje, la notificación se presenta correctamente (el mensaje está bien allí) pero la intención cuando el usuario actúa la notificación utiliza datos antiguos, por lo que se pasa el mensaje anterior y no el nuevo.
Por lo tanto, la intención es almacenar en caché y reutilizar los extras anteriores. ¿Cómo puedo hacerlo único por contacto y por acción?
¿Hay alguna forma de eliminar todos los IntentExtras en caché? Supongo que lo arreglé ahora, pero todavía quedan otras Intenciones almacenadas en caché ... – OneWorld
Puede surgir un problema similar dependiendo de los indicadores de intención o del modo de lanzamiento de una actividad.En este caso, deberá verificar [Activity :: onNewIntent] (http://j.mp/ieXMCA), ya que Activity :: getIntent devolverá el intento ORIGINAL de la actividad, no el nuevo intento con la acción/extras actualizada./etc. – brack