Android: xóa thông báo khỏi thanh thông báo


166

Tôi đã tạo một ứng dụng và với một sự kiện tôi quản lý để thêm thông báo trên thanh thông báo Android. Bây giờ tôi cần mẫu làm thế nào để loại bỏ thông báo đó khỏi thanh thông báo về một sự kiện ??



để biết đoạn mã, hãy xóa Thông báo
Tofeeq Ahmad

Câu trả lời:


182

Điều này khá đơn giản. Bạn phải gọi cancelhoặc cancelAlltrên Thông báo của bạn. Tham số của phương thức hủy là ID của thông báo sẽ bị hủy.

Xem API: http://developer.android.com/reference/android/app/NotificationManager.html#cattery(int)


Cảm ơn Roflcoptr :) Tôi đã tìm thấy nó ở đây: stackoverflow.com/questions/2839727/ trên
Nezir

3
riêng tư tĩnh cuối cùng MY_NOTIFICATION_ID = 1234; Chuỗi ns = Ngữ cảnh.NOTIFICATION_SERVICE; Thông báo Trình quản lý mNotificationManager; mNotificationManager = (NotificationManager) getSystemService (ns); mNotificationManager.notify (MY_NOTIFICATION_ID, thông báo); Mã ví dụ không đầy đủ. Nó phụ thuộc vào cách bạn tạo thông báo của bạn. Chỉ cần đảm bảo rằng bạn sử dụng cùng một id để hủy thông báo của bạn như bạn đã sử dụng khi bạn tạo thông báo của mình. Để hủy: mNotificationManager.celon (MY_NOTIFICATION_ID);
Nezir

Bạn đã tiết kiệm trong ngày!, Rất vui được đọc những người như bạn, mặc dù họ không phải là câu trả lời phức tạp cho những vấn đề phức tạp mà những người như bạn giúp chúng tôi rất nhiều trong những thời điểm khó khăn. Cảm ơn rât nhiều.
điện tử

công khai void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)). hủy (id);}
phnghue

1
Còn những thông báo được tạo bởi hệ thống thì sao?
Zaid Mirza

219

Bạn có thể thử mã nhanh này

public static void cancelNotification(Context ctx, int notifyId) {
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns);
    nMgr.cancel(notifyId);
}

19
Đây phải là câu trả lời đúng bởi vì nó đơn giản, chính xác và đi thẳng vào vấn đề.
ZeroTek

1
Xin chào đây là câu trả lời đúng. Nhưng Khay thông báo vẫn hiển thị. Có cách nào để che giấu nó là tốt? Ví dụ: tôi có hai hành động liên quan đến Thông báo: hủy và thực hiện. Khi một trong những hành động này được thực hiện, tôi sẽ xóa thông báo. Nhưng làm điều này nó chỉ loại bỏ thông báo nhưng khay thông báo vẫn hiển thị.
Shajeel Afzal

1
1 Line, chỉ cần gọi id thông báo: public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)) hủy (id);.}
phnghue

bạn không cần ctx. Thông báo Trình quản lý nMgr = (Thông báo Trình quản lý) getSystemService (Ngữ cảnh.NOTIFICATION_SERVICE);
canbax

61

Bạn cũng có thể gọi cancelAlltrình quản lý thông báo, do đó bạn thậm chí không phải lo lắng về id thông báo.

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

EDIT: Tôi đã bị hạ cấp vì vậy có lẽ tôi nên xác định rằng điều này sẽ chỉ xóa thông báo khỏi ứng dụng của bạn.


không có trình quản lý thông báo cho tiền cảnh:startForeground(NOTIFICATION_ID, mNotification);
user924

12

chỉ cần đặt setAuto Hủy (Đúng) như đoạn mã sau:

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

3
Điều này chỉ hoạt động nếu bạn nhấn vào thông báo trực tiếp. Nhấn vào hành động (như ở đây: pl.vc/1gvrli ) không xóa thông báo.
baris1892

Đây không phải là những gì đã được hỏi. Câu hỏi: "Tôi cần mẫu làm thế nào để xóa thông báo đó khỏi thanh thông báo về một sự kiện ??"
David

12

điều này sẽ giúp:

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

điều này sẽ xóa tất cả các thông báo được thực hiện bởi ứng dụng

và nếu bạn tạo một thông báo bằng cách gọi

startForeground();

bên trong một Dịch vụ. Bạn có thể phải gọi

stopForeground(false);

đầu tiên, sau đó hủy thông báo.


Nếu có thể bạn có thể trả lời câu hỏi này là tốt? Tôi đã làm giống như bạn đề xuất, nhưng nó không hoạt động với tôi trên Android 10. Nhấp vào đây để đặt câu hỏi
Maulik Dodia

7

Nếu bạn đang tạo Thông báo từ một Dịch vụ được bắt đầu ở nền trước bằng cách sử dụng

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Sau đó ban hành

notificationManager.cancel(NOTIFICATION_ID);

không hoạt động hủy Thông báo & thông báo vẫn xuất hiện trên thanh trạng thái. Trong trường hợp cụ thể này, bạn sẽ giải quyết những điều này bằng 2 cách:

1> Sử dụng stopForeground (false) bên trong dịch vụ:

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

2> Phá hủy lớp dịch vụ đó bằng hoạt động gọi:

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

Cách thứ hai thích trong thông báo trình phát nhạc hơn vì cách thay thế không chỉ thông báo xóa mà còn xóa trình phát ... !!


Cảm ơn câu trả lời của bạn! Sử dụng stopForeground(true); manager.cancelAll();là những gì giải quyết nó cho tôi!
chenshuiluke

3

Hãy thử nó

public void removeNotification(Context context, int notificationId) {      
    NotificationManager nMgr = (NotificationManager) context.getApplicationContext()
            .getSystemService(Context.NOTIFICATION_SERVICE);
    nMgr.cancel(notificationId);
}

Nếu có thể bạn có thể trả lời câu hỏi này là tốt? Tôi đã làm giống như bạn đề xuất, nhưng nó không hoạt động với tôi trên Android 10. Nhấp vào đây để đặt câu hỏi
Maulik Dodia


2

NotificationManager.cancel(id)là câu trả lời đúng Tuy nhiên, bạn có thể xóa trong Android Oreo và các thông báo mới hơn bằng cách xóa toàn bộ kênh thông báo. Điều này sẽ xóa tất cả các tin nhắn trong kênh bị xóa.

Dưới đây là ví dụ từ tài liệu Android :

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

1

Trên API Android> = 23, bạn có thể thực hiện một số thao tác như thế này để xóa một nhóm thông báo.

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

0

Chỉ cần gọi ID:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.