É possível limpar uma notificação programaticamente?
Eu tentei com o, NotificationManager
mas não está funcionando. Existe alguma outra maneira de fazer isso?
É possível limpar uma notificação programaticamente?
Eu tentei com o, NotificationManager
mas não está funcionando. Existe alguma outra maneira de fazer isso?
Respostas:
Use o seguinte código para cancelar uma Notificação:
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
Neste código existe sempre o mesmo id usado para notificações. Se você tiver notificações diferentes que precisam ser canceladas, você deve salvar os ids usados para criar a notificação.
setContentText
), embora eu defina a prioridade para 2. Alguma sugestão?
De: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
Para limpar a notificação da barra de status quando o usuário a seleciona na janela Notificações, adicione o sinalizador "FLAG_AUTO_CANCEL" ao seu objeto Notificação. Você também pode limpá-lo manualmente com cancel (int), passando o ID de notificação ou limpar todas as suas Notificações com cancelAll ().
Mas Donal está certo, você só pode limpar as notificações que criou.
Já que ninguém postou uma resposta em código para isso:
notification.flags = Notification.FLAG_AUTO_CANCEL;
.. e se você já tem sinalizadores, você pode OR FLAG_AUTO_CANCEL assim:
notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
Tente o método padrão fornecido no NotificationManager .
NotificationManager.cancelAll()
para remover todas as notificações.
NotificationManager.cancel(notificationId)
para remover uma notificação específica.
cancel
método, o cancel
método não é estático, então você precisa de uma instância NotificationManager
como esta: NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Então você pode chamar notificationManager.cancel(notificationId);
como Rohit Suthar referenciado em sua resposta. notificationId
é simplesmente o ID para o qual você passounotificationManager.notify(notificationId, mNotification)
A partir da API de nível 18 (Jellybean MR2), você pode cancelar notificações que não sejam as suas por meio de NotificationListenerService.
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class MyNotificationListenerService extends NotificationListenerService {...}
...
private void clearNotificationExample(StatusBarNotification sbn) {
myNotificationListenerService.cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
Notification mNotification = new Notification.Builder(this)
.setContentTitle("A message from: " + fromUser)
.setContentText(msg)
.setAutoCancel(true)
.setSmallIcon(R.drawable.app_icon)
.setContentIntent(pIntent)
.build();
.setAutoCancel (true)
quando você clica na notificação, abre a atividade correspondente e remove a notificação da barra de notificação
Se você estiver gerando notificação de um serviço que é iniciado em primeiro plano usando
startForeground(NOTIFICATION_ID, notificationBuilder.build());
Em seguida, emitindo
notificationManager.cancel(NOTIFICATION_ID);
não acaba cancelando a Notificação, e a notificação ainda aparece na barra de status. Neste caso específico, você precisará emitir
stopForeground( true );
de dentro do serviço para colocá-lo de volta no modo de segundo plano e cancelar simultaneamente as notificações. Como alternativa, você pode colocá-lo em segundo plano sem que ele cancele a notificação e, em seguida, cancele a notificação.
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
Se você estiver usando NotificationCompat.Builder
(uma parte de android.support.v4
), basta chamar o método de seu objetosetAutoCancel
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
Alguns caras relataram que setAutoCancel()
não funcionou para eles, então você também pode tentar desta forma
builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
Observe que o método getNotification()
está obsoleto !!!
// Get a notification builder that's compatible with platform versions
// >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(
this);
builder.setSound(soundUri);
builder.setAutoCancel(true);
isso funciona se você estiver usando um construtor de notificação ...
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager Nmang = (NotificationManager) getApplicationContext()
.getSystemService(ns);
Nmang .cancel(getIntent().getExtras().getInt("notificationID"));
para obter mais referências, clique aqui http://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-android.html
Na verdade, conforme respondido antes de começar com a API de nível 18, você pode cancelar notificações postadas por outros aplicativos diferentes do seu usando NotificationListenerService, mas essa abordagem não funcionará mais no Lollipop. Aqui está uma maneira de remover notificações que abrangem também a API Lillipop.
if (Build.VERSION.SDK_INT < 21) {
cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
cancelNotification(sbn.getKey());
}
cancelNotification
que é?
Todas as notificações (mesmo outras notificações de aplicativo) podem ser removidas ouvindo 'NotificationListenerService' conforme mencionado na Implementação de NotificationListenerService
No serviço você tem que ligar cancelAllNotifications()
.
O serviço deve ser habilitado para seu aplicativo através de:
'Aplicativos e notificações' -> 'Acesso especial a aplicativos' -> 'Acesso a notificações'.
este código funcionou para mim:
public class ExampleReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
int notificationId = 1;
notificationManager.cancel(notificationId);
}
}
Acredito que o mais RECENTE e ATUALIZADO para AndroidX e compatibilidade com versões anteriores. A melhor maneira de fazer isso (Kotlin e Java) deve ser:
NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)
Ou para cancelar todas as notificações:
NotificationManagerCompat.from(context).cancelAll()
Feito para AndroidX ou bibliotecas de suporte.