2013-02-22 5 views
18

Sto tentando di mostrare una notifica che deve essere cancellata quando l'utente lo tocca. Sto usando la classe NotificationCompat per compilare la mia notifica e chiamo setAutoCancel(true) sul mio builder. Questo è il pezzo di codice:Notifica setAutoCancel (true) non funziona

NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this) 
     .setSmallIcon(R.drawable.ic_launcher) 
     .setContentTitle("title") 
     .setAutoCancel(true) 
     .setContentText("content"); 
    NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(0, mBuilder.build()); 

La notifica è stata aggiunta correttamente ma quando lo tocco, non succede nulla! Dove mi sbaglio?

+0

La notifica rimane semplicemente lì? Cosa succede quando lo fai scorrere per eliminarlo? Quale versione di dispositivo e API stai utilizzando? –

+0

Sono in esecuzione su Galaxy Nexsus, API 4.2.2. La notifica scompare se la faccio scorrere, ma se semplicemente la tocco, non succede nulla. – TheModularMind

risposta

41

Utilizzando setContentIntent dovrebbe risolvere il tuo problema:

.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0)); 

Nel tuo esempio:

NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this) 
     .setSmallIcon(R.drawable.notification_icon) 
     .setContentTitle("title") 
     .setAutoCancel(true) 
     .setContentText("content") 
     .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0)); 
NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
notificationManager.notify(0, mBuilder.build()); 

Spesso si potrebbe desiderare di indirizzare l'utente ai contenuti pertinenti e quindi potrebbe sostituire 'nuovo Intent() 'con qualcos'altro.

Ho caricato uno demo su github.

+2

Perché questa risposta è stata downvoted? FA quello che chiede la domanda! Grazie, ha funzionato per me. –

+0

Grazie. Sebbene l'utente possa comunque cancellare la notifica scorrendola. – gatopeich

+0

Ho scoperto che questo funziona, ma può portare a un risultato inaspettato particolare: apro anche il contenutoIntent separatamente dalla notifica. Questo può annullare automaticamente l'audio della notifica (su moto g3, su Google Pixel non funziona). – jobbert

17

So che una risposta è già stata accettata, ma ho avuto lo stesso problema con una soluzione diversa, quindi la condividerò qui.

Per me, stavo usando lo stesso oggetto NotificationCompat.Builder per creare una notifica che ha chiamato setOngoing(true). Si trattava di una notifica di avanzamento del caricamento che non dovrebbe essere rimossa durante il lavoro.

Ad ogni modo, dopo il completamento dell'attività, ho chiamato setAutoCancel(true) ma la notifica non si stava ancora cancellando. Quello che dovevo fare era chiamare lo setOngoing(false).

Ora sembra abbastanza ovvio, ma potrebbe salvare qualcun altro in futuro.

+0

Per favore, se hai trovato la soluzione per il tuo problema - scrivi il modo corretto per risolverlo –

+0

grazie, ho riscontrato lo stesso problema, mi hai salvato la giornata! – SalutonMondo

+0

thnks budd hhhhhjhjh :) – Shikhar