অ্যান্ড্রয়েডে কীভাবে কোনও বিজ্ঞপ্তি সাফ করবেন


99

অগ্রগতিগতভাবে কোনও বিজ্ঞপ্তি পরিষ্কার করা সম্ভব?

আমি এটি দিয়ে চেষ্টা করেছি NotificationManagerকিন্তু এটি কাজ করছে না। আমি এটি করতে পারে অন্য কোন উপায় আছে?


12
আপনার নিজের বিজ্ঞপ্তিগুলি সাফ করা সম্ভব তবে অন্য কারও নয়
ডোনাল রাফার্টি

4
হ্যাঁ ডোনাল এর সাথে একক
ট্রেনিংসেন্টার.ব্লগস্পট.ন

উত্তর:


228

একটি বিজ্ঞপ্তি বাতিল করতে নিম্নলিখিত কোডটি ব্যবহার করুন:

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

এই কোডটিতে সর্বদা একই আইডি বিজ্ঞপ্তিগুলির জন্য ব্যবহৃত হয়। আপনার যদি পৃথক বিজ্ঞপ্তিগুলি বাতিল করতে হয় তবে আপনাকে বিজ্ঞপ্তি তৈরি করতে ব্যবহৃত আইডিকে সংরক্ষণ করতে হবে।


9
আমি জানি না কেন এটি আরও বেশি উত্সাহিত করা হয়নি এবং উত্তর হিসাবে নির্বাচিত হয়েছে। এটিই আমি সমাধান খুঁজছিলাম। ধন্যবাদ!
loeschg

4
এখানে নোটিফিকেশন আইডিটি কী হওয়া উচিত?
দীপক

এটি আসলে কাজ করে। তবে একবার আমি কোনও বিজ্ঞপ্তি বাতিল করলে পরবর্তী সমস্ত বিজ্ঞপ্তি বিজ্ঞপ্তি বার্তার পাঠ্যটি প্রদর্শন করে না (যা আমি ব্যবহার করে সেট করেছি setContentText) যদিও আমি অগ্রাধিকারটি ২ সেট করে রেখেছি? কোনও পরামর্শ?
ইকবাল

বিজ্ঞপ্তি পতাকাটি বিজ্ঞপ্তি হিসাবে সেট করা থাকলে কাজ করছে না
F FLAG_NO_CLEAR

4
সবার জন্য এবং যদি আপনি কোন আইডি জানেন না, যদি (নোটিফিকেশন ম্যানেজার! = নাল) {নোটিফিকেশন ম্যানেজার.cancelAll (); }
মেহমেট

42

থেকে: http://developer.android.com/guide/topics/ui/notifiers/notifications.html

ব্যবহারকারী যখন বিজ্ঞপ্তি উইন্ডো থেকে এটি নির্বাচন করেন তখন স্ট্যাটাস বারের বিজ্ঞপ্তিটি সাফ করার জন্য আপনার বিজ্ঞপ্তি অবজেক্টে "FLAG_AUTO_CANCEL" পতাকা যুক্ত করুন। আপনি এটি বাতিল (ইনট) দিয়ে ম্যানুয়ালি সাফ করতে পারেন, এটিকে নোটিফিকেশন আইডি দিয়ে যাবেন বা বাতিল হওয়া সমস্ত () দিয়ে আপনার সমস্ত বিজ্ঞপ্তি সাফ করুন।

তবে ডোনাল ঠিক আছে, আপনি তৈরি করা বিজ্ঞপ্তিগুলি কেবল সাফ করতে পারেন।


11
এটি অগ্রগতিমূলকভাবে কোনও বিজ্ঞপ্তি বাতিল করবে না।
জানুস

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;
সেবাস্তিয়ান নওক

কেউ কেন এটি ভাল যে কেন ব্যাখ্যা করতে পারেন?
অধ্যাপক

@ প্রফিট এটি একই উদ্দেশ্যে কম কোড, এবং এর কার্য সম্পাদনে কোনও প্রভাব ফেলেনি।
ডেনি

4
@ ডেনি এটি প্রথম বিজ্ঞপ্তি পতাকাটিকে উপরে সংজ্ঞায়িত করে ধরে নিয়েছে তাই এটি এক লাইনের পরিবর্তে দুটি লাইন রয়েছে
অধ্যাপক

22

নোটিফিকেশন ম্যানেজারের মধ্যে সরবরাহ করা ডিফল্ট পদ্ধতি চেষ্টা করুন

NotificationManager.cancelAll()সমস্ত বিজ্ঞপ্তি অপসারণ করতে। NotificationManager.cancel(notificationId)নির্দিষ্ট বিজ্ঞপ্তি অপসারণ করতে।


4
যদি কেউ নোটিফিকেশন ম্যানেজারের কোনও 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

আপনি যদি 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()অবচয় করা হয়েছে !!!


প্রোগ্রামটি এটি কীভাবে সাফ করবে তা প্রশ্ন জিজ্ঞাসা করেছিল। ব্যবহারকারী নোটিফিকেশনে ক্লিক করলে সেটআউটোক্যান্সেল () এটি সাফ করে। বিকাশকারী.অ্যান্ড্রয়েড.
এস ফিট্জ

@ এসফিট্জ প্রশ্নটি থেকে তিনি কী চান তা পরিষ্কার নয়। আমি বুঝতে পেরেছিলাম যে কোনও ব্যবহারকারী এটিতে ক্লিক করলে তিনি বিজ্ঞপ্তিটি সাফ করতে চান।
স্যান্ডেলন

4

আপনি যদি কোনও পরিষেবা থেকে বিজ্ঞপ্তি তৈরি করছেন যা অগ্রভাগে ব্যবহার করে শুরু করা হয়েছে

startForeground(NOTIFICATION_ID, notificationBuilder.build());

তারপরে জারি করা হচ্ছে

notificationManager.cancel(NOTIFICATION_ID);

বিজ্ঞপ্তি বাতিল করা শেষ হয় না এবং বিজ্ঞপ্তিটি এখনও স্ট্যাটাস বারে উপস্থিত হয়। এই বিশেষ ক্ষেত্রে, আপনার ইস্যু করা প্রয়োজন

stopForeground( true );

পরিষেবাটির মধ্যে থেকে এটিকে আবার ব্যাকগ্রাউন্ড মোডে রাখতে এবং একই সাথে বিজ্ঞপ্তিগুলি বাতিল করতে। পর্যায়ক্রমে, আপনি বিজ্ঞপ্তিটি বাতিল না করে পটভূমিতে ঠেলাতে পারেন এবং তারপরে বিজ্ঞপ্তিটি বাতিল করতে পারেন।

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

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

আপনি যদি কোনও বিজ্ঞপ্তি নির্মাতা ব্যবহার করে থাকেন তবে এটি কাজ করে ...


2

আমি বিশ্বাস করি অ্যান্ড্রয়েডএক্স এবং পশ্চাদপটে সামঞ্জস্যের জন্য সর্বাধিক সাম্প্রতিকআপডেটেড । করার সেরা উপায় (কোটলিন এবং জাভা) এটি করা উচিত:

NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)

বা সমস্ত বিজ্ঞপ্তি বাতিল করতে হয়:

NotificationManagerCompat.from(context).cancelAll()

অ্যান্ড্রয়েডএক্স বা সহায়তা গ্রন্থাগারগুলির জন্য তৈরি।


1

প্রকৃতপক্ষে এপিআই লেভেল 18 দিয়ে শুরু করার আগে উত্তর হিসাবে আপনি অন্য অ্যাপ্লিকেশন দ্বারা পোস্ট করা বিজ্ঞপ্তিগুলি নোটিফিকেশনলিস্টনার সার্ভিস ব্যবহার করে আপনার নিজের চেয়ে আলাদা করতে পারেন তবে সেই পদ্ধতিটি ললিপপটিতে আর কাজ করবে না, এখানে লিলিপপ এপিআই-কেও বিজ্ঞপ্তি মুছে ফেলার উপায়।

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

আমি পদ্ধতিটি খুঁজে পাচ্ছি না এটি cancelNotificationকী?
ডেনি

এটি নোটিফিকেশনলিস্টনার সার্ভিস ক্লাসের একটি পদ্ধতি, দয়া করে সরকারী ডকুমেন্টেশন বিকাশকারীকে
আলেজান্দ্রো ক্যাসানোভা

আমি কীভাবে এটি পরিষেবাটির বাইরে ব্যবহার করতে পারি?
ডেনি

1
   String ns = Context.NOTIFICATION_SERVICE;
  NotificationManager Nmang = (NotificationManager) getApplicationContext()
                                                     .getSystemService(ns);
  Nmang .cancel(getIntent().getExtras().getInt("notificationID"));

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);
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.