एंड्रॉइड: नोटिफिकेशन बार से सूचना हटा दें


166

मैंने एक एप्लिकेशन बनाया है और एक घटना के साथ मैं एंड्रॉइड नोटिफिकेशन बार में अधिसूचना जोड़ने का प्रबंधन करता हूं। अब मुझे नमूना चाहिए कि किसी घटना पर सूचना पट्टी से उस अधिसूचना को कैसे हटाया जाए ??



कोड ऑफ पीस देखने के लिए रिमूवल नोटिफ़िकेशन
टॉफिक अहमद

जवाबों:


182

यह काफी सरल है। आपको कॉल करना होगा cancelया cancelAllअपने NotificationManager पर। रद्द करने की विधि का पैरामीटर अधिसूचना की आईडी है जिसे रद्द किया जाना चाहिए।

एपीआई देखें: http://developer.android.com/reference/android/app/NotificationManager.html#cancar(


धन्यवाद Roflcoptr :) मुझे यह यहाँ मिला: stackoverflow.com/questions/2839727/…
Nezir

3
निजी स्थिर अंतिम परिचय MY_NOTIFICATION_ID = 1234; स्ट्रिंग ns = Context.NOTIFICATION_SERVICE; सूचना प्रबंधन mNotificationManager; mNotificationManager = (NotificationManager) getSystemService (ns); mNotificationManager.notify (MY_NOTIFICATION_ID, अधिसूचना); उदाहरण कोड पूरा नहीं है। यह इस बात पर निर्भर करता है कि आपका नोटिफिकेशन कैसे बना। बस यह सुनिश्चित करें कि आपने अपनी अधिसूचना को रद्द करने के लिए उसी आईडी का उपयोग किया है जब आपने अपना नोटिफिकेशन बनाया था। रद्द करने के लिए: mNotificationManager.cancel (MY_NOTIFICATION_ID);
नजीर

आपने दिन बचाया! आप जैसे लोगों को पढ़ने का एक आनंद, भले ही वे जटिल मुद्दों के जटिल जवाब नहीं हैं, जैसे आप मुश्किल समय में हमारी बहुत मदद करते हैं। आपका बहुत बहुत धन्यवाद।
ई-इंफो e128 १०

public void delNoti (int id) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)) रद्द करें (id);}
phnghue

1
उन अधिसूचनाओं के बारे में क्या जो सिस्टम द्वारा बनाई गई हैं?
ज़ैद मिर्ज़ा

219

आप इस त्वरित कोड को आज़मा सकते हैं

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

19
यह सही उत्तर होना चाहिए क्योंकि यह सरल है, सही है और सीधे बिंदु पर पहुंच जाता है।
जीरोटेक

1
नमस्ते यह सही उत्तर है। लेकिन अधिसूचना ट्रे दिखाई देती है। क्या इसे छिपाने का भी कोई तरीका है? उदाहरण के लिए मेरे पास अधिसूचना से जुड़ी दो कार्रवाइयाँ हैं: रद्द करें और करें। जब इनमें से कोई भी कार्रवाई की जाती है तो मैं अधिसूचना निकाल रहा हूं। लेकिन ऐसा करने से यह केवल सूचना को हटाता है, लेकिन अधिसूचना ट्रे दिखाई देती है।
शजील अफजल

1
1 लाइन, बस अधिसूचना कॉल आईडी: सार्वजनिक शून्य delNoti (पूर्णांक आईडी) {((NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE)) को रद्द (आईडी);।}
phnghue

आपको ctx की आवश्यकता नहीं है NotificationManager nMgr = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE);
कैनबैक्स

61

आप cancelAllअधिसूचना प्रबंधक पर भी कॉल कर सकते हैं , इसलिए आपको अधिसूचना आईडी के बारे में चिंता करने की आवश्यकता नहीं है।

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

संपादित करें: मुझे नीचा दिखाया गया था इसलिए शायद मुझे यह निर्दिष्ट करना चाहिए कि यह केवल आपके आवेदन से अधिसूचना को हटा देगा।


अग्रभूमि के लिए कोई सूचना प्रबंधक नहीं है:startForeground(NOTIFICATION_ID, mNotification);
user924

12

बस सेटआटोकेनसेल (ट्रू) को निम्न कोड की तरह सेट करें:

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

यह वह नहीं है जो पूछा गया था। प्रश्न: "मुझे एक घटना पर अधिसूचना बार से उस अधिसूचना को निकालने के लिए नमूना की आवश्यकता है ??"
डेविड

12

ये सहायता करेगा:

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

इस एप्लिकेशन द्वारा किए गए सभी सूचनाओं को हटा देना चाहिए

और यदि आप कॉल करके एक सूचना बनाते हैं

startForeground();

Service.you के अंदर आपको कॉल करना पड़ सकता है

stopForeground(false);

पहले, फिर अधिसूचना रद्द करें।


यदि संभव हो तो आप इस प्रश्न का उत्तर भी दे सकते हैं? जैसा आपने सुझाव दिया था मैंने वैसा ही किया, लेकिन यह मेरे लिए एंड्रॉइड 10 पर काम नहीं कर रहा है। प्रश्न के लिए यहां क्लिक करें
मौलिक दोडिया

7

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

startForeground(NOTIFICATION_ID, notificationBuilder.build());

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

notificationManager.cancel(NOTIFICATION_ID);

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

1> सेवा के अंदर stopForeground (झूठा) का उपयोग करना:

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

यदि संभव हो तो आप इस प्रश्न का उत्तर भी दे सकते हैं? आपने जैसा सुझाव दिया था मैंने वैसा ही किया, लेकिन यह मेरे लिए एंड्रॉइड 10 पर काम नहीं कर रहा है। इस सवाल के लिए यहां क्लिक करें
मौलिका दोडिया


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

0

बस कॉल आईडी:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.