Android: hapus notifikasi dari bilah notifikasi

166

Saya telah membuat aplikasi dan dengan acara saya berhasil menambahkan notifikasi di bilah notifikasi android. Sekarang saya perlu sampel bagaimana menghapus pemberitahuan itu dari bilah notifikasi pada suatu acara ??

Nezir
sumber
1
kemungkinan duplikat Hapus ikon pemberitahuan dari bilah status
rds
untuk sepotong kode, lihat Menghapus Notiikasi
Tofeeq Ahmad

Jawaban:

182

Ini cukup sederhana. Anda harus menelepon cancelatau cancelAlldi NotificationManager Anda. Parameter metode pembatalan adalah ID pemberitahuan yang harus dibatalkan.

Lihat API: http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)

RoflcoptrException
sumber
Terima kasih Roflcoptr :) Saya menemukannya di sini: stackoverflow.com/questions/2839727/…
Nezir
3
int static final pribadi MY_NOTIFICATION_ID = 1234; String ns = Konteks.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager = (NotificationManager) getSystemService (ns); mNotificationManager.notify (MY_NOTIFICATION_ID, notifikasi); Kode contoh tidak lengkap. Tergantung bagaimana Anda membuat notifikasi. Pastikan Anda menggunakan id yang sama untuk membatalkan pemberitahuan seperti yang Anda gunakan saat membuat pemberitahuan. Untuk membatalkan: mNotificationManager.cancel (MY_NOTIFICATION_ID);
Nezir
Anda menyelamatkan hari itu !, senang membaca orang-orang seperti Anda, meskipun itu bukan jawaban yang kompleks untuk masalah rumit yang orang-orang seperti Anda banyak membantu kami di masa-masa sulit. Terima kasih banyak.
e-info128
public void delNoti (int id) {((NotificationManager) getSystemService (Konteks.NOTIFICATION_SERVICE)). batalkan (id);}
phnghue
1
bagaimana dengan notifikasi yang dibuat oleh sistem?
Zaid Mirza
219

Anda dapat mencoba kode cepat ini

public static void cancelNotification(Context ctx, int notifyId) {
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns);
    nMgr.cancel(notifyId);
}
Ankit Patial
sumber
19
Ini harus menjadi jawaban yang benar karena sederhana, benar dan langsung ke intinya.
ZeroTek
1
Hai, ini jawaban yang benar. Tetapi Baki Pemberitahuan tetap terlihat. Apakah ada cara untuk menyembunyikannya juga? Misalnya saya memiliki dua tindakan yang terkait dengan Pemberitahuan: batalkan dan lakukan. Ketika salah satu dari tindakan ini diambil, saya menghapus pemberitahuan. Tetapi melakukan ini hanya menghilangkan notifikasi tetapi baki notifikasi tetap terlihat.
Shajeel Afzal
1
1 Line, panggil id notifikasi: public void delNoti (int id) {((NotificationManager) getSystemService (Konteks.NOTIFICATION_SERVICE)). Cancel (id);}
phnghue
Anda tidak perlu ctx. NotificationManager nMgr = (NotificationManager) getSystemService (Konteks.NOTIFICATION_SERVICE);
canbax
61

Anda juga dapat memanggil cancelAllpengelola notifikasi, sehingga Anda bahkan tidak perlu khawatir tentang id notifikasi.

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

EDIT: Saya downvoted jadi mungkin saya harus menentukan bahwa ini hanya akan menghapus notifikasi dari aplikasi Anda.

Stephane Mathis
sumber
tidak ada pengelola pemberitahuan untuk latar depan:startForeground(NOTIFICATION_ID, mNotification);
user924
12

cukup set setAutoCancel (True) seperti kode berikut:

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());`
farhad.kargaran
sumber
3
Ini hanya berfungsi jika Anda mengetuk notifikasi secara langsung. Mengetuk tindakan (seperti di sini: pl.vc/1gvrli ) tidak menghapus pemberitahuan.
baris1892
Ini bukan yang diminta. Pertanyaannya: "Saya perlu sampel cara menghapus pemberitahuan itu dari bilah pemberitahuan pada suatu acara ??"
David
12

ini akan membantu:

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

ini harus menghapus semua pemberitahuan yang dibuat oleh aplikasi

dan jika Anda membuat pemberitahuan dengan menelepon

startForeground();

di dalam suatu Layanan. Anda mungkin harus menelepon

stopForeground(false);

pertama, lalu batalkan notifikasi.

pilotmario
sumber
Jika memungkinkan, bisakah Anda menjawab pertanyaan ini juga? Saya melakukan hal yang sama seperti yang Anda sarankan, tetapi tidak bekerja untuk saya di Android 10. Klik di sini untuk pertanyaan
Maulik Dodia
7

Jika Anda menghasilkan Pemberitahuan dari Layanan yang dimulai di latar depan menggunakan

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Lalu mengeluarkan

notificationManager.cancel(NOTIFICATION_ID);

tidak berfungsi membatalkan Pemberitahuan & pemberitahuan masih muncul di bilah status. Dalam kasus khusus ini, Anda akan menyelesaikannya dengan 2 cara:

1> Menggunakan layanan dalam stopForeground (false):

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

2> Hancurkan kelas layanan itu dengan aktivitas menelepon:

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

Cara kedua lebih memilih notifikasi pemutar musik karena cara tidak hanya menghapus notifikasi tetapi juga menghapus player ... !!

Dhruv Raval
sumber
Terima kasih atas jawaban anda! Menggunakan stopForeground(true); manager.cancelAll();adalah yang memecahkannya untuk saya!
chenshuiluke
3

Silakan coba ini,

public void removeNotification(Context context, int notificationId) {      
    NotificationManager nMgr = (NotificationManager) context.getApplicationContext()
            .getSystemService(Context.NOTIFICATION_SERVICE);
    nMgr.cancel(notificationId);
}
Akansha patel
sumber
Jika memungkinkan, bisakah Anda menjawab pertanyaan ini juga? Saya melakukan hal yang sama seperti yang Anda sarankan, tetapi tidak bekerja untuk saya di Android 10. Klik di sini untuk pertanyaan
Maulik Dodia
2

Gunakan NotificationManager untuk membatalkan pemberitahuan Anda. Anda hanya perlu memberikan id notifikasi Anda

mNotificationManager.cancel (YOUR_NOTIFICATION_ID);

periksa juga tautan ini Lihat Tautan Pengembang

Muhammad Usman Ghani
sumber
2

NotificationManager.cancel(id)adalah jawaban yang benar. Namun Anda dapat menghapus di Android Oreo dan notifikasi nanti dengan menghapus seluruh saluran notifikasi. Ini harus menghapus semua pesan di saluran yang dihapus.

Berikut adalah contoh dari dokumentasi Android :

NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
mNotificationManager.deleteNotificationChannel(id);
gil.fernandes
sumber
1

Pada Android API> = 23 Anda dapat melakukan beberapa kegiatan seperti ini untuk menghapus sekelompok pemberitahuan.

  for (StatusBarNotification statusBarNotification : mNotificationManager.getActiveNotifications()) {
        if (KEY_MESSAGE_GROUP.equals(statusBarNotification.getGroupKey())) {
            mNotificationManager.cancel(statusBarNotification.getId());
        }
    }
Szabolcs Menjadi
sumber
0

Panggil saja ID:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
Phnghue
sumber