A notificação do Android não desaparece após clicar na notificação

132

Se houver algum problema com uma notificação, quero mostrar na barra de notificação. Embora eu defina o sinalizador de Notification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCELnotificação, a notificação não desaparece após clicar nele. Alguma idéia do que estou fazendo de errado?

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    int icon = R.drawable.icon;
    CharSequence tickerText = "Ticker Text";
    long time = System.currentTimeMillis();

    Notification notification = new Notification(icon, tickerText, time);
    notification.flags = Notification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCEL; 

    Context context = getApplicationContext();
    CharSequence contentTitle = "Title";
    CharSequence contentText = "Text";
    Intent notificationIntent = new Intent(this, SilentFlipConfiguration.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
    mNotificationManager.notify(1,notification);
Flo
fonte

Respostas:

304

Enquanto construindo Notificationpor NotificationBuildervocê pode usar notificationBuilder.setAutoCancel(true);.

Kamil Lelonek
fonte
2
Então, quais diferenças criam notificações usando o Notification mNotificationManager.notify(1,notification);e o NotificationBuilder mNotificationManager.notify(1, mBuilder.build());? Obrigado.
Yohanes AI
9
Esta resposta deve ser aceita, está mais alinhada com a atual doutrina de design para Android
jmaculate
Esta resposta está correta. Aceito um funciona, mas nem sempre. Há um problema quando há notificações empilhadas no GCM (ou o que você estiver usando). Depois de executar ping no servidor de notificação, ele retorna com muitas notificações e, às vezes, apenas altera a aparência da notificação.
Nikola Milutinovic 01/10
5
notificationBuilder.setAutoCancel(true);não está funcionando para mim. Devo colocar antes da minha intenção pendente?
Kairi San
129
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL

A partir da documentação:

Bit a ser bit a bit ou ed no campo de sinalizadores que deve ser definido se a notificação for cancelada ao ser clicada pelo usuário

synic
fonte
3
Esta não é a resposta correta. Notification.DEFAULT_LIGHTSfaz parte da Notification.defaultsclasse, não a Notification.flagsclasse. Veja minha resposta para os levantadores apropriados.
Darcy
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL; este método está funcionando obrigado synic.
precisa saber é o seguinte
1
O código nesta resposta resultou no som da notificação sendo reproduzido várias vezes. Confira as outras respostas.
ban-geoengineering
27
// Uses the default lighting scheme
notification.defaults |= Notification.DEFAULT_LIGHTS;

// Will show lights and make the notification disappear when the presses it
notification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;
Darcy
fonte
1
Eu passei pelos documentos do Android. Ainda não entendo quando as bandeiras devem ser usadas. Por que não é apenas notification.defaults = notification.DEFAULT_LIGHTS o suficiente para mostrar as luzes. Porque a vibração e o som funcionam sem a bandeira.
21412 Ashwin
Estou usando o NotificationBuilder, NotificationCompat.Builder mBuilder = new NotificationCompat.Builder (this) .setSmallIcon (android.R.drawable.ic_popup_sync) .setContentTitle ("Novo Tweet") .setContentText ("Existem" + contagem + "tweets") ; mBuilder.setDefaults (NotificationCompat.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL);
Joseph
2

A resposta para mim foi usar mBuilder.setOngoing(false)

Tribo da Máquina
fonte
1

Use o sinalizador Notification.FLAG_AUTO_CANCEL

Notification notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(context, contentTitle, contentText, pendingIntent);

// Cancel the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;

e para iniciar o aplicativo:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

Intent intent = new Intent(context, App.class);

PendingIntent pendingIntent = PendingIntent.getActivity(context, intent_id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Sachin Suthar
fonte
0

Remover uma notificação

As notificações permanecem visíveis até que um dos seguintes aconteça:

  1. O usuário dispensa a notificação.
  2. O usuário clica na notificação e você chamou setAutoCancel () quando criou a notificação.
  3. Você chama cancel () para um ID de notificação específico. Este método também exclui as notificações em andamento.
  4. Você chama cancelAll (), que remove todas as notificações que você emitiu anteriormente.
  5. Se você definir um tempo limite ao criar uma notificação usando setTimeoutAfter (), o sistema cancelará a notificação após a duração especificada. Se necessário, você pode cancelar uma notificação antes que a duração do tempo limite especificado termine.

Para mais detalhes, consulte: https://developer.android.com/training/notify-user/build-notification?hl=pt-BR

Anjo
fonte