เป็นไปได้ไหมที่จะล้างการแจ้งเตือนโดยใช้โปรแกรม
ฉันลองแล้วNotificationManager
แต่มันใช้งานไม่ได้ มีวิธีอื่นที่ฉันสามารถทำได้หรือไม่?
เป็นไปได้ไหมที่จะล้างการแจ้งเตือนโดยใช้โปรแกรม
ฉันลองแล้วNotificationManager
แต่มันใช้งานไม่ได้ มีวิธีอื่นที่ฉันสามารถทำได้หรือไม่?
คำตอบ:
ใช้รหัสต่อไปนี้เพื่อยกเลิกการแจ้งเตือน:
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
ในรหัสนี้จะมีรหัสเดียวกับที่ใช้สำหรับการแจ้งเตือน หากคุณมีการแจ้งเตือนอื่นที่จำเป็นต้องยกเลิกคุณจะต้องบันทึกรหัสที่คุณใช้ในการสร้างการแจ้งเตือน
setContentText
) แม้ว่าฉันจะตั้งค่าลำดับความสำคัญเป็น 2 ข้อเสนอแนะใด ๆ
จาก: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
หากต้องการล้างการแจ้งเตือนแถบสถานะเมื่อผู้ใช้เลือกจากหน้าต่างการแจ้งเตือนให้เพิ่มแฟล็ก "FLAG_AUTO_CANCEL" ในออบเจ็กต์การแจ้งเตือนของคุณ คุณยังสามารถล้างด้วยตนเองด้วยการยกเลิก (int) ส่งรหัสการแจ้งเตือนหรือล้างการแจ้งเตือนทั้งหมดของคุณด้วยการยกเลิกทั้งหมด ()
แต่ Donal พูดถูกคุณสามารถล้างการแจ้งเตือนที่คุณสร้างขึ้นเท่านั้น
เนื่องจากไม่มีใครโพสต์คำตอบรหัสสำหรับสิ่งนี้:
notification.flags = Notification.FLAG_AUTO_CANCEL;
.. และหากคุณมีแฟล็กอยู่แล้วคุณสามารถหรือ FLAG_AUTO_CANCEL ดังนี้:
notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
cancel
เมธอดcancel
วิธีนี้จะไม่คงที่ดังนั้นคุณต้องมีอินสแตนซ์NotificationManager
เช่นนี้: NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
จากนั้นคุณสามารถโทรหาnotificationManager.cancel(notificationId);
Rohit Suthar ที่อ้างถึงในคำตอบของเขา notificationId
เป็นเพียง ID ที่คุณส่งผ่านnotificationManager.notify(notificationId, mNotification)
เริ่มต้นด้วย API ระดับ 18 (Jellybean MR2) คุณสามารถยกเลิกการแจ้งเตือนอื่น ๆ ที่ไม่ใช่ของคุณเองผ่านทาง 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 (จริง)
เมื่อคุณคลิกที่การแจ้งเตือนเปิดกิจกรรมที่เกี่ยวข้องและลบการแจ้งเตือนออกจากแถบการแจ้งเตือน
หากคุณใช้NotificationCompat.Builder
(ส่วนหนึ่งandroid.support.v4
) ให้เรียกวิธีการของวัตถุsetAutoCancel
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
ผู้ชายบางคนได้รับรายงานsetAutoCancel()
ว่าไม่ได้ผลสำหรับพวกเขาดังนั้นคุณอาจลองวิธีนี้เช่นกัน
builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
โปรดทราบว่าวิธีgetNotification()
นี้เลิกใช้แล้ว !!!
หากคุณกำลังสร้างการแจ้งเตือนจากบริการที่เริ่มต้นในส่วนหน้าโดยใช้
startForeground(NOTIFICATION_ID, notificationBuilder.build());
แล้วออก
notificationManager.cancel(NOTIFICATION_ID);
ไม่สิ้นสุดการยกเลิกการแจ้งเตือนและการแจ้งเตือนยังคงปรากฏในแถบสถานะ ในกรณีนี้คุณจะต้องออก
stopForeground( true );
จากภายในบริการเพื่อนำกลับเข้าสู่โหมดพื้นหลังและเพื่อยกเลิกการแจ้งเตือนพร้อมกัน อีกวิธีหนึ่งคือคุณสามารถดันเข้าไปในพื้นหลังได้โดยไม่ต้องยกเลิกการแจ้งเตือนแล้วยกเลิกการแจ้งเตือน
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
// Get a notification builder that's compatible with platform versions
// >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(
this);
builder.setSound(soundUri);
builder.setAutoCancel(true);
ใช้งานได้ถ้าคุณใช้ตัวสร้างการแจ้งเตือน ...
ฉันเชื่อว่าล่าสุดและอัปเดตที่สุดสำหรับ AndroidX และความเข้ากันได้รุ่นเก่า วิธีที่ดีที่สุดในการทำ (Kotlin และ Java) ควรทำดังนี้:
NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)
หรือจะยกเลิกการแจ้งเตือนทั้งหมดคือ:
NotificationManagerCompat.from(context).cancelAll()
สร้างขึ้นสำหรับ AndroidX หรือไลบรารีสนับสนุน
ตามคำตอบก่อนเริ่มต้นด้วย API ระดับ 18 คุณสามารถยกเลิกการแจ้งเตือนที่โพสต์โดยแอปอื่น ๆ ได้แตกต่างจากของคุณเองโดยใช้ NotificationListenerService แต่วิธีการดังกล่าวจะใช้ไม่ได้กับ Lollipop อีกต่อไปนี่คือวิธีลบการแจ้งเตือนที่ครอบคลุมถึง Lillipop API
if (Build.VERSION.SDK_INT < 21) {
cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
cancelNotification(sbn.getKey());
}
cancelNotification
คืออะไร?
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager Nmang = (NotificationManager) getApplicationContext()
.getSystemService(ns);
Nmang .cancel(getIntent().getExtras().getInt("notificationID"));
การแจ้งเตือนทั้งหมด (แม้แต่การแจ้งเตือนของแอปอื่น ๆ ) สามารถลบออกได้ผ่านการฟัง 'NotificationListenerService' ตามที่กล่าวไว้ใน การใช้งาน NotificationListenerService
ในบริการที่คุณต้องโทร cancelAllNotifications()
.
ต้องเปิดใช้บริการสำหรับแอปพลิเคชันของคุณผ่าน:
'แอปและการแจ้งเตือน' -> 'การเข้าถึงแอปพิเศษ' -> 'การเข้าถึงการแจ้งเตือน'
รหัสนี้ใช้ได้กับฉัน:
public class ExampleReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
int notificationId = 1;
notificationManager.cancel(notificationId);
}
}