Thông báo Android không biến mất sau khi nhấp vào thông báo


132

Nếu có một số vấn đề với thông báo tôi muốn hiển thị trên thanh thông báo. Mặc dù tôi đặt cờ Notification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCELthông báo thành thông báo không biến mất sau khi nhấp vào nó. Bất cứ ý tưởng những gì tôi đang làm sai?

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

    int icon = R.drawable.icon;
    CharSequence tickerText = "Ticker Text";
    long time = System.currentTimeMillis();

    Notification notification = new Notification(icon, tickerText, time);
    notification.flags = Notification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCEL; 

    Context context = getApplicationContext();
    CharSequence contentTitle = "Title";
    CharSequence contentText = "Text";
    Intent notificationIntent = new Intent(this, SilentFlipConfiguration.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
    mNotificationManager.notify(1,notification);

Câu trả lời:


304

Trong khi xây dựng Notificationbởi NotificationBuilderbạn có thể sử dụng notificationBuilder.setAutoCancel(true);.


2
Vậy, sự khác biệt nào tạo ra thông báo bằng Thông báo mNotificationManager.notify(1,notification);và sử dụng Thông báo mNotificationManager.notify(1, mBuilder.build());? Cảm ơn.
Yohanes AI

9
Câu trả lời này phải được chấp nhận, nó phù hợp hơn với học thuyết thiết kế Android hiện tại
jmaculation

Câu trả lời này là chính xác. Chấp nhận một công trình nhưng không phải luôn luôn. Có vấn đề khi có các thông báo xếp chồng trên GCM (hoặc bất cứ điều gì bạn đang sử dụng). Khi bạn ping máy chủ thông báo, nó sẽ trả về với rất nhiều thông báo và đôi khi nó chỉ lặp lại sự xuất hiện của thông báo.
Nikola Milutinovic

5
notificationBuilder.setAutoCancel(true);không làm việc cho tôi. Tôi có nên đặt trước Ý định chờ xử lý?
Kairi San

129
notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL

Từ tài liệu:

Bit được bit bit- hoặc ed vào trường cờ nên được đặt nếu thông báo sẽ bị hủy khi người dùng nhấp vào nó


3
Đây không phải là câu trả lời chính xác. Notification.DEFAULT_LIGHTSlà một phần của Notification.defaultslớp học, không phải là Notification.flagslớp học. Xem câu trả lời của tôi cho các setters thích hợp.
Darcy

thông báo.flags = Thông báo.DEFAULT_LIGHTS | Thông báo.FLAG_AUTO_CANCEL; phương pháp này đang hoạt động cảm ơn bạn synic.
Ravikumar11

1
Mã trong câu trả lời này dẫn đến âm thanh thông báo được phát nhiều lần. Kiểm tra các câu trả lời khác.
ban-geengineering

27
// Uses the default lighting scheme
notification.defaults |= Notification.DEFAULT_LIGHTS;

// Will show lights and make the notification disappear when the presses it
notification.flags |= Notification.FLAG_AUTO_CANCEL | Notification.FLAG_SHOW_LIGHTS;

1
Tôi đã trải qua các tài liệu Android. Tôi không nhận được khi cờ nên được sử dụng. Tại sao không chỉ là notify.defaults = notify.DEFAULT_LIGHTS đủ để hiển thị đèn. Bởi vì rung và âm thanh làm việc mà không có cờ.
Ashwin

Đang sử dụng NotificationBuilder, NotificationCompat.Builder mBuilder = new NotificationCompat.Builder (this) .setSmallIcon (android.R.drawable.ic_popup_sync) .setContentTitle ("Tweet mới") .setContentText ("Có" ; mBuilder.setDefaults (Thông báoCompat.DEFAULT_LIGHTS | Thông báo.FLAG_AUTO_CANCEL);
Giuse



1

Sử dụng cờ Thông báo.FLAG_AUTO_CANCEL

Notification notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(context, contentTitle, contentText, pendingIntent);

// Cancel the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;

và để khởi chạy ứng dụng:

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

Intent intent = new Intent(context, App.class);

PendingIntent pendingIntent = PendingIntent.getActivity(context, intent_id, intent, PendingIntent.FLAG_UPDATE_CURRENT);

0

Xóa thông báo

Thông báo vẫn hiển thị cho đến khi một trong những điều sau đây xảy ra:

  1. Người dùng bỏ qua thông báo.
  2. Người dùng nhấp vào thông báo và bạn đã gọi setAuto Hủy () khi bạn tạo thông báo.
  3. Bạn gọi hủy () cho một ID thông báo cụ thể. Phương pháp này cũng xóa các thông báo đang diễn ra.
  4. Bạn gọi CancAll (), loại bỏ tất cả các thông báo bạn đã đưa ra trước đó.
  5. Nếu bạn đặt thời gian chờ khi tạo thông báo bằng setTimeoutAfter (), hệ thống sẽ hủy thông báo sau khi hết thời lượng đã chỉ định. Nếu được yêu cầu, bạn có thể hủy thông báo trước khi hết thời gian chờ đã chỉ định.

Để biết thêm chi tiết, hãy xem: https://developer.android.com/training/notify-user/build-notification?hl=vi

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.