एंड्रॉइड में एक अधिसूचना कैसे साफ़ करें


97

क्या यह संभव है कि सूचना को स्पष्ट रूप से साफ़ किया जाए?

मैंने इसके साथ कोशिश की, NotificationManagerलेकिन इसका काम नहीं हुआ। क्या कोई और तरीका है जो मैं कर सकता हूं?


12
यह संभव है कि आप स्वयं के नोटिफिकेशन को क्लियर कर सकते हैं लेकिन किसी और को नहीं
डोनल रैफेरटी

1
हां कोड के टुकड़े के लिए डोनल से सहमत हैं androidtrainningcenter.blogspot.in/2013/04/…
टॉफिक अहमद

API के लिए अन्य सूचनाओं को साफ़ करने के तरीके के लिए यह उत्तर देखें> = 18 - stackoverflow.com/a/25693210/1073832
जिम विट

जवाबों:


227

अधिसूचना रद्द करने के लिए निम्नलिखित कोड का उपयोग करें:

NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);

इस कोड में सूचनाओं के लिए उसी आईडी का उपयोग किया जाता है। यदि आपके पास अलग-अलग सूचनाएं हैं जिन्हें रद्द करने की आवश्यकता है तो आपको उन आईडी को सहेजना होगा जिन्हें आपने अधिसूचना बनाने के लिए उपयोग किया था।


9
मुझे नहीं पता कि यह अधिक क्यों नहीं उतारा गया और उत्तर के रूप में चुना गया। यह वह उपाय था जिसकी मुझे तलाश थी। धन्यवाद!
लोशेग

3
यहां नोटिफिकेशन आईडी क्या होनी चाहिए?
दीपक

यह वास्तव में काम करता है। लेकिन एक बार जब मैं एक अधिसूचना को रद्द कर देता हूं, तो बाद की सभी अधिसूचनाएं अधिसूचना संदेश पाठ (जो मैं उपयोग कर setContentTextरहा हूं) नहीं दिखाती हूं, हालांकि मैंने 2 को प्राथमिकता दी है। कोई सुझाव?
इकबाल

अधिसूचना ध्वज के रूप में अधिसूचना फ्लैग सेट करने पर काम नहीं किया जा रहा है।
FAG_NO_CLEAR

2
सभी के लिए और यदि आप नहीं जानते हैं कि कौन सी आईडी, यदि (सूचना प्रबंधक! = अशक्त) {सूचना प्रबंधक / बैंकसेल (); }
mehmet

42

प्रेषक: http://developer.android.com/guide/topics/ui/notifiers/notifications.html

उपयोगकर्ता द्वारा अधिसूचना विंडो से चयन करने पर स्थिति बार सूचना को साफ़ करने के लिए, अपनी सूचना ऑब्जेक्ट में "FLAG_AUTO_CANCEL" ध्वज जोड़ें। आप इसे कैंसिल (int) के साथ मैन्युअल रूप से क्लियर कर सकते हैं, इसे नोटिफिकेशन आईडी पास कर सकते हैं, या अपने सभी नोटिफिकेशन को कैंसल () के साथ क्लियर कर सकते हैं।

लेकिन डोनल सही है, आप केवल सूचनाओं को स्पष्ट कर सकते हैं जिन्हें आपने बनाया था।


11
यह सूचनात्मक रूप से अधिसूचना रद्द नहीं करेगा।
Janusz

4
यकीन नहीं हो रहा है कि जानुस किस बारे में बात कर रहे हैं लेकिन रद्द करें (आईडी) और रद्द करें () निश्चित रूप से काम करें
एंड्रयू जी

32

चूंकि किसी ने भी इस पर एक कोड उत्तर पोस्ट नहीं किया है:

notification.flags = Notification.FLAG_AUTO_CANCEL;

.. और यदि आपके पास पहले से ही झंडे हैं, तो आप इस तरह से FLAG_AUTO_CANCEL कर सकते हैं:

notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;

4
यह इस तरह से बेहतर है:notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
सेबेस्टियन नोवाक

किसी को भी समझा सकता है कि यह बेहतर क्यों है?
प्रोफेसर

@ यह समान उद्देश्य के लिए कम कोड है, और प्रदर्शन पर इसका कोई प्रभाव नहीं है।
डेनी

1
@ डेनी यह मानती है कि पहला अधिसूचना ध्वज ऊपर परिभाषित किया गया है इसलिए यह एक पंक्ति के बजाय दो पंक्तियाँ है
Prof

21

कृपया NotificationManager में प्रदान की गई डिफ़ॉल्ट विधि का प्रयास करें ।

NotificationManager.cancelAll()सभी अधिसूचना को हटाने के लिए। NotificationManager.cancel(notificationId)विशेष अधिसूचना निकालने के लिए।


1
यदि किसी के पास नोटिफिकेशन मैनजर नहीं है cancel, तो cancelविधि स्थिर नहीं है, इसलिए आपको NotificationManagerइस तरह के एक उदाहरण की आवश्यकता है : NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);फिर आप notificationManager.cancel(notificationId);रोहित सुथार को कॉल कर सकते हैं जैसे उनके उत्तर में संदर्भित है। notificationIdबस वह आईडी है जिसमें आप गए थेnotificationManager.notify(notificationId, mNotification)
Mira_Cole

8

एपीआई स्तर 18 (जेलीबीन एमआर 2) से शुरू होकर आप नोटिफिकेशनलिस्टनर सेवा के माध्यम से अपने अलावा अन्य सूचनाएं रद्द कर सकते हैं।

@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());
}

5
 Notification mNotification = new Notification.Builder(this)

                .setContentTitle("A message from: " + fromUser)
                .setContentText(msg)
                .setAutoCancel(true)
                .setSmallIcon(R.drawable.app_icon)
                .setContentIntent(pIntent)
                .build();

.setAutoCancel (सही)

जब आप अधिसूचना पर क्लिक करते हैं, तो संबंधित गतिविधि खोलें और अधिसूचना बार से अधिसूचना हटा दें


4

यदि आप उस सेवा से अधिसूचना जनरेट कर रहे हैं जिसका उपयोग अग्रभूमि में शुरू किया गया है

startForeground(NOTIFICATION_ID, notificationBuilder.build());

फिर जारी कर रहा है

notificationManager.cancel(NOTIFICATION_ID);

अधिसूचना रद्द करना समाप्त नहीं करता है, और अधिसूचना अभी भी स्थिति पट्टी में दिखाई देती है। इस विशेष मामले में, आपको जारी करने की आवश्यकता होगी

stopForeground( true );

सेवा के भीतर से इसे पृष्ठभूमि मोड में वापस लाने के लिए और साथ ही सूचनाओं को रद्द करने के लिए। वैकल्पिक रूप से, आप इसे अधिसूचना रद्द किए बिना पृष्ठभूमि में धकेल सकते हैं और फिर अधिसूचना रद्द कर सकते हैं।

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

3

यदि आप 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()को हटा दिया गया है !!!


प्रश्न पूछा गया कि इसे प्रोग्रामेटिक रूप से कैसे साफ़ किया जाए। उपयोगकर्ता द्वारा अधिसूचना पर क्लिक करने पर setAutoCancel () इसे साफ़ करता है। developer.android.com/reference/android/support/v4/app/...
एस Fitz

@SFitz यह सवाल से स्पष्ट नहीं है कि वह क्या चाहता है। मैं समझ गया कि जब उपयोगकर्ता इस पर क्लिक करता है तो वह अधिसूचना को साफ़ करना चाहता है।
सैंडलऑन

1
    // Get a notification builder that's compatible with platform versions
    // >= 4
    NotificationCompat.Builder builder = new NotificationCompat.Builder(
            this);
    builder.setSound(soundUri);
    builder.setAutoCancel(true);

यह काम करता है अगर आप एक अधिसूचना निर्माता का उपयोग कर रहे हैं ...



1

वास्तव में API स्तर 18 से शुरू होने से पहले उत्तर दिया गया है कि आप NotificationListenerService का उपयोग करते हुए अपने स्वयं के अलावा अन्य ऐप्स के द्वारा अलग-अलग पोस्ट किए गए अधिसूचनाओं को रद्द कर सकते हैं, लेकिन यह दृष्टिकोण अब लॉलीपॉप पर काम नहीं करेगा, यहाँ Lillipop API को कवर करने वाले नोटिफिकेशन को हटाने का तरीका है।

if (Build.VERSION.SDK_INT < 21) {
    cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
    cancelNotification(sbn.getKey());
}

मुझे वह विधि नहीं मिली cancelNotificationजो वह है?
डेनी

यह NotificationListenerService वर्ग की एक विधि है, कृपया आधिकारिक दस्तावेज डेवलपर की
Alejandro Casanova

मैं इसे सेवा के बाहर कैसे उपयोग कर सकता हूं?
डेनी

0

NotificationListenerService कार्यान्वयन में उल्लिखित सभी सूचनाएं (यहां तक ​​कि अन्य एप्लिकेशन सूचनाएं) 'NotificationListenerService' सुनने के माध्यम से हटाया जा सकता है

सेवा में आपको कॉल करना होगा cancelAllNotifications()

सेवा को आपके आवेदन के लिए सक्षम होना चाहिए:

'ऐप्स और सूचनाएं' -> 'विशेष एप्लिकेशन पहुंच' -> 'सूचनाएं पहुंच'।


0

इस कोड ने मेरे लिए काम किया:

public class ExampleReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);

    int notificationId = 1;
    notificationManager.cancel(notificationId);
  }
}

0

मैं सबसे मानना है कि हाल के और UPDATED AndroidX और पिछली संगतता के लिए। यह करने का सबसे अच्छा तरीका (कोटलिन और जावा) इस प्रकार किया जाना चाहिए:

NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)

या सभी सूचनाओं को रद्द करना है:

NotificationManagerCompat.from(context).cancelAll()

AndroidX या समर्थन पुस्तकालयों के लिए बनाया गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.