it-swarm.it

La notifica supera i vecchi Intent Extras

sto creando una notifica all'interno di un BroadcastReceiver tramite questo codice:

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);

Quando clicco sulla notifica, apre NotificationActivity e all'interno dell'attività posso recuperare foo_id dal pacchetto Intent (ad es. 1)

Tuttavia, se viene attivata un'altra notifica e faccio nuovamente clic su di essa, l'attività continua a ricevere il "vecchio" valore (1) dal pacchetto Intento. Ho provato a cancellare il pacchetto con clear (), ma sto ricevendo lo stesso effetto. Penso che sth abbia torto con il mio codice ..

114
BrianM

Stai inviando lo stesso codice di richiesta per il tuo annuncio in sospeso . Modifica questo:

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

A:

PendingIntent contentIntent = PendingIntent.getActivity(context, UNIQUE_INT_PER_CALL, notificationIntent, 0);

gli intenti non vengono creati se si inviano gli stessi parametri. Sono riutilizzati.

235
IncrediApp

In alternativa, puoi utilizzare il seguente codice per generare il tuo PendingIntent:

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Dal doc per PendingIntent.FLAG_UPDATE_CURRENT:

Se il PendingIntent descritto esiste già, mantienilo ma sostituisci i suoi dati extra con ciò che è in questo nuovo Intento. Questo può essere usato se stai creando degli intenti in cui cambiano solo gli extra, e non ti preoccupare che le entità che hanno ricevuto il tuo precedente PendingIntent saranno in grado di avviarlo con i tuoi nuovi extra anche se non gli sono stati dati esplicitamente.

124
ChristophK

Stai passando lo stesso ID. In questo tipo di situazione, crea un ID unico dal momento in questo modo:

int iUniqueId = (int) (System.currentTimeMillis() & 0xfffffff);

E mettilo come questo:

PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(),iUniqueId, intentForNotification, 0);
38
hderanga

Per chiunque cerchi l'approccio migliore dopo molto tempo tutto ciò che serve per passare il PendingIntent.FLAG_UPDATE_CURRENT come ultimo argomento come mostrato di seguito

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

non è nemmeno necessario fornire un nuovo ID univoco.

3
Gentle

Il tuo codice di richiesta è 0 per tutte le notifiche. Cambia la seguente riga:

PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

Con:

PendingIntent contentIntent = PendingIntent.getActivity(context, new Random().nextInt(), notificationIntent, 0);
0
Faisal Shaikh