ti-enxame.com

A notificação setAutoCancel (true) não funciona

Estou tentando mostrar uma notificação que é removida quando o usuário toca nela. Estou usando a classe NotificationCompat para criar minha notificação e chamo setAutoCancel(true) no meu construtor. Este é o trecho de código:

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

A notificação foi adicionada corretamente, mas quando toco nela, nada acontece! O que estou fazendo de errado?

25
TheModularMind

O uso de setContentIntent deve resolver seu problema:

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

No seu exemplo:

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

Muitas vezes, você pode direcionar o usuário para o conteúdo relevante e, portanto, substituir 'new Intent ()' por outra coisa.

Carreguei um demo no github.

54
snodnipper

Sei que uma resposta já foi aceita, mas tive o mesmo problema com uma solução diferente, por isso vou compartilhá-la aqui.

Para mim, eu estava usando o mesmo objeto NotificationCompat.Builder Para criar uma notificação chamada setOngoing(true). Isso se aplica a uma notificação de progresso do upload que não deve ser removida durante o trabalho.

De qualquer forma, depois que a tarefa foi concluída, liguei para setAutoCancel(true), mas a notificação ainda não estava desaparecendo. O que eu tive que fazer também foi chamar setOngoing(false).

Parece bastante óbvio agora, mas pode salvar outra pessoa em algum momento no futuro.

23
JMRboosties