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


166

ฉันได้สร้างแอปพลิเคชันและมีกิจกรรมที่ฉันจัดการเพื่อเพิ่มการแจ้งเตือนในแถบการแจ้งเตือนของ Android ตอนนี้ฉันต้องการตัวอย่างวิธีลบการแจ้งเตือนนั้นออกจากแถบการแจ้งเตือนในเหตุการณ์



สำหรับชิ้นส่วนของรหัสดูการลบการแจ้งเตือน
Tofeeq Ahmad

คำตอบ:


182

มันค่อนข้างง่าย คุณต้องโทรcancelหรือcancelAllบน NotificationManager ของคุณ พารามิเตอร์ของวิธีการยกเลิกคือ ID ของการแจ้งเตือนที่ควรถูกยกเลิก

ดู API: http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)


ขอบคุณ Roflcoptr :) ฉันพบแล้วที่นี่: stackoverflow.com/questions/2839727/…
Nezir

3
ส่วนตัวคงที่สุดท้าย int MY_NOTIFICATION_ID = 1234; String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) getSystemService (ns); mNotificationManager.notify (MY_NOTIFICATION_ID การแจ้งเตือน); โค้ดตัวอย่างไม่สมบูรณ์ ขึ้นอยู่กับว่าคุณสร้างการแจ้งเตือนของคุณอย่างไร เพียงตรวจสอบให้แน่ใจว่าคุณใช้รหัสเดียวกันเพื่อยกเลิกการแจ้งเตือนตามที่คุณใช้เมื่อคุณสร้างการแจ้งเตือน หากต้องการยกเลิก: mNotificationManager.cancel (MY_NOTIFICATION_ID);
Nezir

คุณประหยัดทั้งวัน! มีความสุขที่ได้อ่านคนอย่างคุณแม้ว่าพวกเขาจะไม่ใช่คำตอบที่ซับซ้อนสำหรับปัญหาที่ซับซ้อนคนอย่างคุณช่วยเราได้มากในเวลาที่ยากลำบาก ขอบคุณมาก.
e-info128

โมฆะสาธารณะ delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)) ยกเลิก (id);}
phnghue

1
สิ่งที่เกี่ยวกับการแจ้งเตือนซึ่งถูกสร้างขึ้นโดยระบบ?
Zaid Mirza

219

คุณสามารถลองใช้รหัสด่วนนี้ได้

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

19
นี่ควรเป็นคำตอบที่ถูกต้องเพราะง่ายถูกต้องและตรงประเด็น
ZeroTek

1
สวัสดีนี่เป็นคำตอบที่ถูกต้อง แต่ถาดการแจ้งเตือนยังคงมองเห็นได้ มีวิธีซ่อนมันด้วยหรือไม่? ตัวอย่างเช่นฉันมีสองการกระทำที่เกี่ยวข้องกับการแจ้งเตือน: ยกเลิกและทำ เมื่อดำเนินการอย่างใดอย่างหนึ่งเหล่านี้ฉันจะลบการแจ้งเตือน แต่การทำเช่นนี้จะเป็นการลบการแจ้งเตือนเท่านั้น แต่ถาดการแจ้งเตือนยังคงปรากฏให้เห็น
Shajeel Afzal

1
1 บรรทัดเพียงแค่เรียกรหัสแจ้งเตือน: โมฆะสาธารณะ delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)) ยกเลิก (id);}
phnghue

คุณไม่ต้องการ ctx NotificationManager nMgr = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE);
canbax

61

คุณสามารถโทรหาcancelAllผู้จัดการการแจ้งเตือนได้ดังนั้นคุณไม่ต้องกังวลเกี่ยวกับรหัสการแจ้งเตือน

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

แก้ไข: ฉันถูกลงคะแนนดังนั้นฉันควรระบุว่าจะลบการแจ้งเตือนจากแอปพลิเคชันของคุณเท่านั้น


ไม่มีตัวจัดการการแจ้งเตือนสำหรับเบื้องหน้า:startForeground(NOTIFICATION_ID, mNotification);
924

12

เพียงตั้ง setAutoCancel (True) เช่นรหัสต่อไปนี้:

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
ใช้งานได้เฉพาะเมื่อคุณแตะที่การแจ้งเตือนโดยตรง การแตะที่การดำเนินการ (เช่นที่นี่: pl.vc/1gvrli ) ไม่ได้เป็นการลบการแจ้งเตือน
baris1892

นี่ไม่ใช่สิ่งที่ถูกถาม คำถาม: "ฉันต้องการตัวอย่างวิธีลบการแจ้งเตือนนั้นออกจากแถบการแจ้งเตือนในเหตุการณ์ ??"
David

12

สิ่งนี้จะช่วย:

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

การดำเนินการนี้ควรลบการแจ้งเตือนทั้งหมดที่แอพทำขึ้น

และถ้าคุณสร้างการแจ้งเตือนโดยการโทร

startForeground();

ภายใน Service.you คุณอาจจะต้องโทร

stopForeground(false);

ก่อนอื่นจากนั้นยกเลิกการแจ้งเตือน


ถ้าเป็นไปได้คุณสามารถตอบคำถามนี้ด้วย? ฉันทำเช่นเดียวกับที่คุณแนะนำ แต่มันไม่ได้ผลสำหรับฉันบน Android 10. คลิกที่นี่เพื่อดูคำถาม
Maulik Dodia

7

หากคุณกำลังสร้างการแจ้งเตือนจากบริการที่เริ่มทำงานในเบื้องหน้าโดยใช้

startForeground(NOTIFICATION_ID, notificationBuilder.build());

จากนั้นจึงออก

notificationManager.cancel(NOTIFICATION_ID);

ไม่ทำงานการยกเลิกการแจ้งเตือน & การแจ้งเตือนจะยังคงปรากฏในแถบสถานะ ในกรณีนี้คุณจะแก้ปัญหาเหล่านี้ได้ 2 วิธี:

1> การใช้ stopForeground (false) ภายในบริการ:

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

2> ทำลายคลาสบริการนั้นด้วยกิจกรรมการโทร:

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

วิธีที่สองชอบในการแจ้งเตือนเครื่องเล่นเพลงมากกว่าเพราะวิธีที่ไม่เพียง แต่ลบการแจ้งเตือน แต่เอาผู้เล่นออกด้วย ... !!


ขอบคุณสำหรับคำตอบ! การใช้stopForeground(true); manager.cancelAll();คือสิ่งที่แก้ไขได้สำหรับฉัน!
chenshuiluke

3

โปรดลองสิ่งนี้

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

ถ้าเป็นไปได้คุณสามารถตอบคำถามนี้ด้วย? ฉันทำเช่นเดียวกับที่คุณแนะนำ แต่มันไม่ได้ผลสำหรับฉันบน Android 10. คลิกที่นี่เพื่อดูคำถาม
Maulik Dodia

2

ใช้ NotificationManager เพื่อยกเลิกการแจ้งเตือนของคุณ คุณจะต้องให้รหัสการแจ้งเตือนของคุณ

mNotificationManager.cancel (YOUR_NOTIFICATION_ID);

ตรวจสอบลิงค์นี้ดูลิงค์ นักพัฒนา


2

NotificationManager.cancel(id)เป็นคำตอบที่ถูกต้อง แต่คุณสามารถลบได้ในAndroid Oreoและการแจ้งเตือนในภายหลังโดยการลบช่องการแจ้งเตือนทั้งหมด การดำเนินการนี้ควรลบข้อความทั้งหมดในช่องที่ถูกลบ

นี่คือตัวอย่างจากเอกสาร Android :

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

1

บน Android API> = 23 คุณสามารถทำสิ่งนี้เพื่อลบกลุ่มการแจ้งเตือน

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

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