Czy możliwe jest programowe wyczyszczenie powiadomienia?
Wypróbowałem to z, NotificationManager
ale nie działa. Czy mogę to zrobić w inny sposób?
Czy możliwe jest programowe wyczyszczenie powiadomienia?
Wypróbowałem to z, NotificationManager
ale nie działa. Czy mogę to zrobić w inny sposób?
Odpowiedzi:
Użyj poniższego kodu, aby anulować powiadomienie:
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
W tym kodzie zawsze znajduje się ten sam identyfikator używany do powiadomień. Jeśli masz różne powiadomienia, które należy anulować, musisz zapisać identyfikatory użyte do utworzenia powiadomienia.
setContentText
), chociaż ustawiam priorytet na 2. Jakieś sugestie?
Od: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
Aby wyczyścić powiadomienie na pasku stanu, gdy użytkownik wybierze je w oknie Powiadomienia, dodaj flagę „FLAG_AUTO_CANCEL” do obiektu powiadomienia. Możesz również wyczyścić go ręcznie za pomocą cancel (int), przekazując mu identyfikator powiadomienia lub wyczyścić wszystkie powiadomienia za pomocą cancelAll ().
Ale Donal ma rację, możesz wyczyścić tylko powiadomienia, które utworzyłeś.
Ponieważ nikt nie opublikował odpowiedzi na to pytanie:
notification.flags = Notification.FLAG_AUTO_CANCEL;
.. a jeśli masz już flagi, możesz OR FLAG_AUTO_CANCEL w ten sposób:
notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
Spróbuj domyślnej metody podanej w NotificationManager .
NotificationManager.cancelAll()
aby usunąć wszystkie powiadomienia.
NotificationManager.cancel(notificationId)
aby usunąć konkretne powiadomienie.
cancel
metody, cancel
metoda nie jest statyczna, więc potrzebujesz takiej instancji NotificationManager
: NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Następnie możesz zadzwonić notificationManager.cancel(notificationId);
jak Rohit Suthar, do którego odwołuje się jego odpowiedź. notificationId
to po prostu identyfikator, który przekazałeśnotificationManager.notify(notificationId, mNotification)
Począwszy od poziomu API 18 (Jellybean MR2) możesz anulować powiadomienia inne niż własne za pośrednictwem usługi 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)
po kliknięciu powiadomienia otwórz odpowiednią czynność i usuń powiadomienie z paska powiadomień
Jeśli generujesz powiadomienie z usługi, która jest uruchamiana na pierwszym planie przy użyciu
startForeground(NOTIFICATION_ID, notificationBuilder.build());
Następnie wydawanie
notificationManager.cancel(NOTIFICATION_ID);
nie kończy się anulowaniem powiadomienia, a powiadomienie nadal pojawia się na pasku stanu. W tym konkretnym przypadku będziesz musiał wydać
stopForeground( true );
z poziomu usługi, aby przełączyć ją z powrotem w tryb tła i jednocześnie anulować powiadomienia. Alternatywnie możesz umieścić go w tle bez konieczności anulowania powiadomienia, a następnie anulować powiadomienie.
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
Jeśli używasz NotificationCompat.Builder
(części android.support.v4
), po prostu wywołaj metodę obiektusetAutoCancel
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
Niektórzy faceci zgłaszali, że setAutoCancel()
to nie działa, więc możesz spróbować również w ten sposób
builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
Zwróć uwagę, że metoda getNotification()
została wycofana !!!
// Get a notification builder that's compatible with platform versions
// >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(
this);
builder.setSound(soundUri);
builder.setAutoCancel(true);
to działa, jeśli używasz konstruktora powiadomień ...
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager Nmang = (NotificationManager) getApplicationContext()
.getSystemService(ns);
Nmang .cancel(getIntent().getExtras().getInt("notificationID"));
aby uzyskać więcej informacji, kliknij tutaj http://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-android.html
Właściwie, zgodnie z odpowiedzią przed rozpoczęciem od poziomu API 18, możesz anulować powiadomienia wysyłane przez inne aplikacje różniące się od Twoich własnych za pomocą NotificationListenerService, ale to podejście nie będzie już działać w Lollipop, oto sposób na usunięcie powiadomień obejmujących również Lillipop API.
if (Build.VERSION.SDK_INT < 21) {
cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
cancelNotification(sbn.getKey());
}
cancelNotification
co to jest?
Wszystkie powiadomienia (nawet inne powiadomienia aplikacji) można usunąć, nasłuchując „NotificationListenerService”, jak wspomniano w NotificationListenerService Implementation
W serwisie trzeba zadzwonić cancelAllNotifications()
.
Usługa musi być włączona dla Twojej aplikacji poprzez:
„Aplikacje i powiadomienia” -> „Specjalny dostęp do aplikacji” -> „Dostęp do powiadomień”.
ten kod zadziałał dla mnie:
public class ExampleReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
int notificationId = 1;
notificationManager.cancel(notificationId);
}
}
Uważam, że NAJNOWSZE i AKTUALIZOWANE dla AndroidX i kompatybilności wstecznej. Najlepiej zrobić to (Kotlin i Java) w następujący sposób:
NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)
Lub anulowanie wszystkich powiadomień to:
NotificationManagerCompat.from(context).cancelAll()
Stworzony dla AndroidX lub bibliotek wsparcia.