Pochi giorni fa stavo faticando a trovare un modo per usare intenti personalizzati per i miei allarmi. Anche se ho avuto una risposta chiara, devo personalizzare gli Intenti sulla base di qualche ID univoco, ad es. setAction()
hanno ancora alcuni problemi.Android continua a memorizzare nella cache i miei intenti Extra, come dichiarare un intento in sospeso che mantiene gli extra freschi?
definisco un PendingIntent in questo modo:
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);
allora questo è utilizzato da un gestore di notifica
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);
Questo funziona in questo modo:
- applicazione crea un messaggio per un contatto
- un intento è fornito con h l'id di contatto e dettagli sul messaggio
- notifica è sollevata con il messaggio
- actiones utente sulla notifica e l'applicazione visualizza il messaggio passato dalla intento
Il problema
Questo può accadere più di una volta per un contatto. E quando viene generato il secondo messaggio, la notifica viene sollevata bene (il messaggio va bene lì) ma l'intento quando l'utente esegue la notifica utilizza vecchi dati, quindi viene passato il messaggio precedente e non il nuovo messaggio.
Quindi in qualche modo l'intento è di memorizzare nella cache e riutilizzare gli extra precedenti. Come posso renderlo unico per contatto e per azione?
C'è un modo per cancellare tutti gli IntentExcached memorizzati nella cache? Suppongo di averlo corretto ora, ma gli Intenti nella cache più vecchi rimangono ... – OneWorld
Un problema simile può sorgere a seconda dei flag dell'Intento o della modalità di avvio di un'attività.In questo caso, dovrai controllare [Activity :: onNewIntent] (http://j.mp/ieXMCA), perché Activity :: getIntent restituirà l'intento ORIGINAL di Activity, non il nuovo intent con l'azione/gli extra aggiornati /eccetera. – brack