2010-08-29 35 views
131

Tôi đã tạo một ứng dụng và với sự kiện tôi quản lý để thêm thông báo vào 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 đó từ thanh thông báo trên một sự kiện ??Android: xóa thông báo khỏi thanh thông báo

+1

thể trùng lặp của [Di chuyển biểu tượng thông báo từ thanh trạng thái] (http://stackoverflow.com/questions/2839727/remove-the-notification- icon-from-the-status-bar) – rds

+0

cho đoạn mã xem [Loại bỏ thông báo] (http://androidtrainningcenter.blogspot.in/2013/04/removing-status-bar-notification-from.html) – Sameer

Trả lời

141

Điều này khá đơn giản. Bạn phải gọi cancel hoặc cancelAll trên NotificationManager của mình. 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#cancel(int)

+0

Cảm ơn Roflcoptr :) Tôi tìm thấy nó ở đây: http://stackoverflow.com/questions/2839727/remove-the-notification-icon-from-the-status-bar – Nezir

+2

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

+0

Bạn đã lưu trong ngày !, một niềm vui khi đọ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 nhiều. –

184

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

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

Đây phải là câu trả lời đúng bởi vì nó đơn giản, chính xác và được chuyển thẳng đến điểm. – 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ó không? Ví dụ: tôi có hai hành động được liên kết với Thông báo: hủy và hoàn tất. Khi một trong các 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ỏ các thông báo nhưng khay thông báo vẫn còn nhìn thấy được. –

1

Sử dụng NotificationManager để hủy bỏ thông báo của bạn. Bạn chỉ cần cung cấp id thông báo

mNotificationManager.cancel (YOUR_NOTIFICATION_ID);

cũng kiểm tra liên kết này See Developer Link

50

Bạn cũng có thể gọi cancelAll trên người quản lý thông báo, vì vậy bạn thậm chí không phải lo lắng về các id thông báo.

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

CHỈNH SỬA: Tôi đã bị bỏ phiếu vì vậy có thể 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.

+2

cảm ơn bạn đã tiết kiệm thời gian .. – Reshma

+0

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

9

chỉ cần đặt setAutoCancel (True) 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

Chỉ hoạt động nếu bạn chạm trực tiếp vào thông báo. Khai thác trên hành động (như ở đây: https://pl.vc/1gvrli) không loại bỏ thông báo. – baris1892

+0

Đâ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 để loại bỏ thông báo đó từ thanh thông báo trên một sự kiện?" – David

5

Nếu bạn đang tạo Thông báo từ một dịch vụ được bắt đầu trong foreground sử dụng

startForeground(NOTIFICATION_ID, notificationBuilder.build()); 

Sau đó phát 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 biệt này, bạn sẽ giải quyết những 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 rằng lớp dịch vụ với các hoạt động kêu 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 nhiều hơn vì thay cách không chỉ xóa thông báo mà còn xóa p lớp cũng ... !!

+0

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

3

này sẽ giúp:

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

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 Service.you có thể phải gọi

stopForeground(false); 
Trước tiên, hãy

rồi hủy thông báo.

1

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

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

NotificationManager.cancel(id) là câu trả lời đúng. Tuy nhiên, bạn có thể xóa trong Android Oreo và thông báo sau bằng cách xóa toàn bộ kênh thông báo. Thao tác này sẽ xóa tất cả thư trong kênh đã xóa.

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

NotificationManager mNotificationManager = 
     (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
// The id of the channel. 
String id = "my_channel_01"; 
mNotificationManager.deleteNotificationChannel(id); 
Các vấn đề liên quan