Android: remover a notificação da barra de notificação

Respostas:

182

Isto é bem simples. Você precisa ligar cancelou cancelAllno seu NotificationManager. O parâmetro do método cancel é o ID da notificação que deve ser cancelada.

Consulte a API: http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)

RoflcoptrException
fonte
Obrigado Roflcoptr :) Encontrei-o aqui: stackoverflow.com/questions/2839727/…
Nezir
3
final estático privado int MY_NOTIFICATION_ID = 1234; String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) getSystemService (ns); mNotificationManager.notify (MY_NOTIFICATION_ID, notificação); O código de exemplo não está completo. Depende de como você criou sua notificação. Apenas certifique-se de usar o mesmo ID para cancelar sua notificação usada quando você a criou. Para cancelar: mNotificationManager.cancel (MY_NOTIFICATION_ID);
Nezir 29/08/10
Você salvou o dia !, é um prazer ler pessoas como você, mesmo que não sejam respostas complexas para questões complexas que pessoas como você nos ajudam muito em tempos difíceis. Muito obrigado.
usar o seguinte código
public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)). cancel (id);}
phnghue
1
e as notificações criadas pelo sistema?
Zaid Mirza
219

Você pode tentar este código rápido

public static void cancelNotification(Context ctx, int notifyId) {
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns);
    nMgr.cancel(notifyId);
}
Ankit Patial
fonte
19
Essa deve ser a resposta correta, porque é simples, correta e vai direto ao ponto.
ZeroTek
1
Oi, esta é a resposta correta. Mas a bandeja de notificação permanece visível. Existe alguma maneira de esconder isso também? Por exemplo, eu tenho duas ações associadas à notificação: cancelar e concluir. Quando uma dessas ações é executada, estou removendo a notificação. Mas fazer isso remove apenas a notificação, mas a bandeja de notificação permanece visível.
Shajeel Afzal 14/11
1
1 Linha, basta ligar para o ID de notificação: public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)) cancelar (id);.}
phnghue
você não precisa de ctx. NotificationManager nMgr = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE);
Canbax
61

Você também pode chamar cancelAllo gerenciador de notificações para não precisar se preocupar com os IDs de notificação.

NotificationManager notifManager= (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notifManager.cancelAll();

EDIT: eu recebi o voto negativo, então talvez eu deva especificar que isso removerá apenas a notificação do seu aplicativo.

Stephane Mathis
fonte
não há gerenciador de notificações para primeiro plano:startForeground(NOTIFICATION_ID, mNotification);
user924 30/08
12

basta definir setAutoCancel (True) como o seguinte código:

Intent resultIntent = new Intent(GameLevelsActivity.this, NotificationReceiverActivityAdv.class);

PendingIntent resultPendingIntent =
        PendingIntent.getActivity(
                GameLevelsActivity.this,
                0,
                resultIntent,
                PendingIntent.FLAG_UPDATE_CURRENT
                );

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
        getApplicationContext()).setSmallIcon(R.drawable.icon)
        .setContentTitle(adv_title)
        .setContentText(adv_desc)
        .setContentIntent(resultPendingIntent)
         //HERE IS WHAT YOY NEED:
        .setAutoCancel(true);

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(547, mBuilder.build());`
farhad.kargaran
fonte
3
Isso funciona apenas se você tocar diretamente na notificação. Tocar na ação (como aqui: pl.vc/1gvrli ) não remove a notificação.
precisa saber é o seguinte
Não foi isso que foi perguntado. A pergunta: "Preciso de uma amostra de como remover essa notificação da barra de notificação em um evento?"
David
12

isso vai ajudar:

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

isso deve remover todas as notificações feitas pelo aplicativo

e se você criar uma notificação chamando

startForeground();

dentro de um Service.you pode ter que ligar

stopForeground(false);

primeiro, depois cancele a notificação.

pilotmario
fonte
Se possível, você também pode responder a essa pergunta? Fiz o mesmo que você sugeriu, mas não está funcionando para mim no Android 10. Clique aqui para a pergunta
Maulik Dodia
7

Se você estiver gerando notificação a partir de um serviço iniciado em primeiro plano usando

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Então emitindo

notificationManager.cancel(NOTIFICATION_ID);

não funciona cancelando a notificação e notificação ainda aparece na barra de status. Nesse caso em particular, você os resolverá de duas maneiras:

1> Usando o serviço stopForeground (false) dentro do serviço:

stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);

2> Destrua essa classe de serviço com a atividade de chamada:

Intent i = new Intent(context, Service.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
if(ServiceCallingActivity.activity != null) {
    ServiceCallingActivity.activity.finish();
}
context.stopService(i);

A segunda maneira prefere mais na notificação do music player, porque não só remove a notificação, mas também remove o player ... !!

Dhruv Raval
fonte
Obrigado pela sua resposta! Usando stopForeground(true); manager.cancelAll();é o que resolveu para mim!
Chenshuiluke
3

Por favor, tente isso,

public void removeNotification(Context context, int notificationId) {      
    NotificationManager nMgr = (NotificationManager) context.getApplicationContext()
            .getSystemService(Context.NOTIFICATION_SERVICE);
    nMgr.cancel(notificationId);
}
Akansha patel
fonte
Se possível, você também pode responder a essa pergunta? Fiz o mesmo que você sugeriu, mas não está funcionando para mim no Android 10. Clique aqui para a pergunta
Maulik Dodia
2

Use o NotificationManager para cancelar sua notificação. Você só precisa fornecer seu ID de notificação

mNotificationManager.cancel (YOUR_NOTIFICATION_ID);

verifique também este link Veja o link do desenvolvedor

Muhammad Usman Ghani
fonte
2

NotificationManager.cancel(id)é a resposta correta. No entanto, você pode remover o Android Oreo e as notificações posteriores excluindo todo o canal de notificação. Isso deve excluir todas as mensagens no canal excluído.

Aqui está o exemplo da documentação do Android :

NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
mNotificationManager.deleteNotificationChannel(id);
gil.fernandes
fonte
1

Na API do Android> = 23, você pode fazer algo assim para remover um grupo de notificações.

  for (StatusBarNotification statusBarNotification : mNotificationManager.getActiveNotifications()) {
        if (KEY_MESSAGE_GROUP.equals(statusBarNotification.getGroupKey())) {
            mNotificationManager.cancel(statusBarNotification.getId());
        }
    }
Szabolcs Becze
fonte
0

Basta ligar para o ID:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
phnghue
fonte