ฉันได้สร้างแอปพลิเคชันและมีกิจกรรมที่ฉันจัดการเพื่อเพิ่มการแจ้งเตือนในแถบการแจ้งเตือนของ Android ตอนนี้ฉันต้องการตัวอย่างวิธีลบการแจ้งเตือนนั้นออกจากแถบการแจ้งเตือนในเหตุการณ์
ฉันได้สร้างแอปพลิเคชันและมีกิจกรรมที่ฉันจัดการเพื่อเพิ่มการแจ้งเตือนในแถบการแจ้งเตือนของ Android ตอนนี้ฉันต้องการตัวอย่างวิธีลบการแจ้งเตือนนั้นออกจากแถบการแจ้งเตือนในเหตุการณ์
คำตอบ:
มันค่อนข้างง่าย คุณต้องโทรcancel
หรือcancelAll
บน NotificationManager ของคุณ พารามิเตอร์ของวิธีการยกเลิกคือ ID ของการแจ้งเตือนที่ควรถูกยกเลิก
ดู API: http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)
คุณสามารถลองใช้รหัสด่วนนี้ได้
public static void cancelNotification(Context ctx, int notifyId) {
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns);
nMgr.cancel(notifyId);
}
คุณสามารถโทรหาcancelAll
ผู้จัดการการแจ้งเตือนได้ดังนั้นคุณไม่ต้องกังวลเกี่ยวกับรหัสการแจ้งเตือน
NotificationManager notifManager= (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notifManager.cancelAll();
แก้ไข: ฉันถูกลงคะแนนดังนั้นฉันควรระบุว่าจะลบการแจ้งเตือนจากแอปพลิเคชันของคุณเท่านั้น
startForeground(NOTIFICATION_ID, mNotification);
เพียงตั้ง 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());`
สิ่งนี้จะช่วย:
NotificationManager mNotificationManager = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
mNotificationManager.cancelAll();
การดำเนินการนี้ควรลบการแจ้งเตือนทั้งหมดที่แอพทำขึ้น
และถ้าคุณสร้างการแจ้งเตือนโดยการโทร
startForeground();
ภายใน Service.you คุณอาจจะต้องโทร
stopForeground(false);
ก่อนอื่นจากนั้นยกเลิกการแจ้งเตือน
หากคุณกำลังสร้างการแจ้งเตือนจากบริการที่เริ่มทำงานในเบื้องหน้าโดยใช้
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();
คือสิ่งที่แก้ไขได้สำหรับฉัน!
โปรดลองสิ่งนี้
public void removeNotification(Context context, int notificationId) {
NotificationManager nMgr = (NotificationManager) context.getApplicationContext()
.getSystemService(Context.NOTIFICATION_SERVICE);
nMgr.cancel(notificationId);
}
ใช้ NotificationManager เพื่อยกเลิกการแจ้งเตือนของคุณ คุณจะต้องให้รหัสการแจ้งเตือนของคุณ
mNotificationManager.cancel (YOUR_NOTIFICATION_ID);
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);
บน Android API> = 23 คุณสามารถทำสิ่งนี้เพื่อลบกลุ่มการแจ้งเตือน
for (StatusBarNotification statusBarNotification : mNotificationManager.getActiveNotifications()) {
if (KEY_MESSAGE_GROUP.equals(statusBarNotification.getGroupKey())) {
mNotificationManager.cancel(statusBarNotification.getId());
}
}
เพียงโทร ID:
public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}