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

Respostas:


304

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


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


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;

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



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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.