การแจ้งเตือน Android ไม่หายไปหลังจากคลิกการแจ้งเตือน


133

หากมีปัญหาบางอย่างเกี่ยวกับการแจ้งเตือนฉันต้องการให้แสดงในแถบการแจ้งเตือน แม้ว่าฉันตั้งค่าสถานะNotification.DEFAULT_LIGHTS & Notification.FLAG_AUTO_CANCELการแจ้งเตือนเป็นการแจ้งเตือนจะไม่หายไปหลังจากคลิก มีความคิดอะไรที่ฉันทำผิด?

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

คำตอบ:


305

ในขณะที่สร้างNotificationโดยNotificationBuilderคุณสามารถใช้notificationBuilder.setAutoCancel(true);.


2
ดังนั้นความแตกต่างอะไรที่สร้างการแจ้งเตือนโดยใช้การแจ้งเตือนmNotificationManager.notify(1,notification);และการใช้ NotificationBuilder mNotificationManager.notify(1, mBuilder.build());? ขอบคุณ
Yohanes AI

9
คำตอบนี้ควรได้รับการยอมรับซึ่งสอดคล้องกับหลักการออกแบบ Android ในปัจจุบันมากกว่า
jmaculate

คำตอบนี้ถูกต้อง ได้รับการยอมรับหนึ่งผลงาน แต่ไม่เสมอไป มีปัญหาเมื่อมีการแจ้งเตือนแบบซ้อนกันบน GCM (หรืออะไรก็ตามที่คุณกำลังใช้งาน) เมื่อคุณ ping เซิร์ฟเวอร์แจ้งเตือนจะส่งคืนพร้อมการแจ้งเตือนจำนวนมากและบางครั้งมันก็วนซ้ำลักษณะการแจ้งเตือน
Nikola Milutinovic

5
notificationBuilder.setAutoCancel(true);ไม่ได้ผลสำหรับฉัน ฉันควรใส่ก่อนเจตนาที่รอดำเนินการหรือไม่
Kairi San

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

จากเอกสารประกอบ:

บิตเป็นบิตหรือแก้ไขในฟิลด์แฟล็กที่ควรตั้งค่าหากการแจ้งเตือนควรถูกยกเลิกเมื่อผู้ใช้คลิก


3
นี่ไม่ใช่คำตอบที่ถูกต้อง Notification.DEFAULT_LIGHTSเป็นส่วนหนึ่งของNotification.defaultsชั้นเรียนไม่ใช่Notification.flagsชั้นเรียน ดูคำตอบของฉันสำหรับตัวตั้งค่าที่เหมาะสม
Darcy

Notification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL; วิธีนี้ใช้งานได้ขอบคุณ synic
Ravikumar11

1
รหัสในคำตอบนี้ส่งผลให้มีการเล่นเสียงแจ้งเตือนหลายครั้ง ตรวจสอบคำตอบอื่น ๆ
ban-geoengineering

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
ฉันได้อ่านเอกสาร Android แล้ว ฉันไม่ค่อยเข้าใจเวลาที่ควรใช้แฟล็ก ทำไมไม่มีแค่ notification.defaults = notification.DEFAULT_LIGHTS พอที่จะแสดงไฟ เพราะการสั่นและเสียงทำงานโดยไม่มีธง.
Ashwin

กำลังใช้ NotificationBuilder, NotificationCompat.Builder mBuilder = NotificationCompat.Builder ใหม่ (this) .setSmallIcon (android.R.drawable.ic_popup_sync) .setContentTitle ("ทวีตใหม่") .setContentText ("มี" + นับ + "ทวีต") ; mBuilder.setDefaults (NotificationCompat.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL);
โจเซฟ



1

ใช้การตั้งค่าสถานะ Notification.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;

และในการเปิดแอป:

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

ลบการแจ้งเตือน

การแจ้งเตือนจะยังคงมองเห็นได้จนกว่าจะเกิดเหตุการณ์ใดสิ่งหนึ่งต่อไปนี้

  1. ผู้ใช้ปิดการแจ้งเตือน
  2. ผู้ใช้คลิกการแจ้งเตือนและคุณเรียกว่า setAutoCancel () เมื่อคุณสร้างการแจ้งเตือน
  3. คุณโทรยกเลิก () สำหรับ ID การแจ้งเตือนเฉพาะ วิธีนี้ยังลบการแจ้งเตือนที่กำลังดำเนินอยู่
  4. คุณโทรยกเลิก All () ซึ่งจะลบการแจ้งเตือนทั้งหมดที่คุณออกก่อนหน้านี้
  5. หากคุณตั้งค่าการหมดเวลาเมื่อสร้างการแจ้งเตือนโดยใช้ setTimeoutAfter () ระบบจะยกเลิกการแจ้งเตือนหลังจากพ้นระยะเวลาที่กำหนด หากจำเป็นคุณสามารถยกเลิกการแจ้งเตือนก่อนที่ระยะหมดเวลาที่ระบุจะผ่านไป

ดูรายละเอียดเพิ่มเติมได้ที่: https://developer.android.com/training/notify-user/build-notification?hl=th

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.