Có thể xóa thông báo theo chương trình không?
Tôi đã thử nó với NotificationManager
nhưng nó không hoạt động. Có cách nào khác mà tôi có thể làm được không?
Có thể xóa thông báo theo chương trình không?
Tôi đã thử nó với NotificationManager
nhưng nó không hoạt động. Có cách nào khác mà tôi có thể làm được không?
Câu trả lời:
Sử dụng mã sau để hủy Thông báo:
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
Trong mã này luôn có cùng một id được sử dụng cho các thông báo. Nếu bạn có các thông báo khác nhau cần được hủy, bạn phải lưu các id mà bạn đã sử dụng để tạo Thông báo.
setContentText
) mặc dù tôi đã đặt mức độ ưu tiên thành 2. Có đề xuất nào không?
Từ: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
Để xóa thông báo trên thanh trạng thái khi người dùng chọn thông báo đó từ cửa sổ Thông báo, hãy thêm cờ "FLAG_AUTO_CANCEL" vào đối tượng Thông báo của bạn. Bạn cũng có thể xóa thông báo theo cách thủ công với hủy (int), chuyển ID thông báo hoặc xóa tất cả Thông báo của bạn với hủyAll ().
Nhưng Donal nói đúng, bạn chỉ có thể xóa các thông báo mà bạn đã tạo.
Vì không ai đã đăng câu trả lời mã cho điều này:
notification.flags = Notification.FLAG_AUTO_CANCEL;
.. và nếu bạn đã có cờ, bạn có thể HOẶC FLAG_AUTO_CANCEL như thế này:
notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
Vui lòng thử phương pháp mặc định được cung cấp trong NotificationManager .
NotificationManager.cancelAll()
để xóa tất cả thông báo.
NotificationManager.cancel(notificationId)
để xóa thông báo cụ thể.
cancel
phương thức, cancel
phương thức không phải là tĩnh, vì vậy bạn cần một ví dụ NotificationManager
như thế này: NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Sau đó, bạn có thể gọi notificationManager.cancel(notificationId);
như Rohit Suthar được tham chiếu trong câu trả lời của anh ấy. notificationId
chỉ đơn giản là ID bạn truyền vàonotificationManager.notify(notificationId, mNotification)
Bắt đầu với API cấp 18 (Jellybean MR2), bạn có thể hủy các Thông báo không phải của riêng bạn thông qua 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)
khi bạn nhấp vào thông báo, hãy mở hoạt động tương ứng và xóa thông báo khỏi thanh thông báo
Nếu bạn đang tạo Thông báo từ một Dịch vụ được khởi chạy ở nền trước bằng cách sử dụng
startForeground(NOTIFICATION_ID, notificationBuilder.build());
Sau đó phát hành
notificationManager.cancel(NOTIFICATION_ID);
không kết thúc việc hủy Thông báo và 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ẽ cần phát hành
stopForeground( true );
từ bên trong dịch vụ để đưa nó trở lại chế độ nền và đồng thời hủy các thông báo. Ngoài ra, bạn có thể đẩy nó vào nền mà không cần phải hủy thông báo và sau đó hủy thông báo.
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
Nếu bạn đang sử dụng NotificationCompat.Builder
(một phần của android.support.v4
) thì chỉ cần gọi phương thức đối tượng của nósetAutoCancel
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
Một số người đã báo cáo điều đó setAutoCancel()
không hiệu quả với họ, vì vậy bạn cũng có thể thử theo cách này
builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
Lưu ý rằng phương pháp getNotification()
này đã không được chấp nhận !!!
// Get a notification builder that's compatible with platform versions
// >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(
this);
builder.setSound(soundUri);
builder.setAutoCancel(true);
điều này hoạt động nếu bạn đang sử dụng trình tạo thông báo ...
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager Nmang = (NotificationManager) getApplicationContext()
.getSystemService(ns);
Nmang .cancel(getIntent().getExtras().getInt("notificationID"));
để tham khảo thêm, hãy nhấp vào đây http://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-android.html
Trên thực tế, như đã trả lời trước khi bắt đầu với API Cấp 18, bạn có thể hủy Thông báo do các ứng dụng khác đăng tải khác với ứng dụng của bạn bằng cách sử dụng NotificationListenerService nhưng cách tiếp cận đó sẽ không còn hoạt động trên Lollipop nữa, đây là cách để loại bỏ thông báo bao gồm API Lillipop.
if (Build.VERSION.SDK_INT < 21) {
cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
cancelNotification(sbn.getKey());
}
cancelNotification
đó là gì?
Tất cả các thông báo (ngay cả các thông báo ứng dụng khác) có thể bị xóa thông qua nghe 'NotificationListenerService' như đã đề cập trong NotificationListenerService Triển khai
Trong dịch vụ bạn phải gọi cancelAllNotifications()
.
Dịch vụ phải được kích hoạt cho ứng dụng của bạn thông qua:
'Ứng dụng và thông báo' -> 'Quyền truy cập ứng dụng đặc biệt' -> 'Quyền truy cập thông báo'.
mã này đã làm việc cho tôi:
public class ExampleReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
int notificationId = 1;
notificationManager.cancel(notificationId);
}
}
Tôi tin rằng GẦN NHẤT và CẬP NHẬT nhất cho AndroidX và khả năng tương thích ngược. Cách tốt nhất để làm (Kotlin và Java) điều này nên được thực hiện như:
NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)
Hoặc để hủy tất cả các thông báo là:
NotificationManagerCompat.from(context).cancelAll()
Được tạo cho AndroidX hoặc Thư viện hỗ trợ.