Cara menghapus notifikasi di Android

96

Apakah mungkin untuk menghapus notifikasi secara terprogram?

Saya mencobanya dengan NotificationManagertetapi tidak berhasil. Apakah ada cara lain yang bisa saya lakukan?

rahul
sumber
12
Dimungkinkan untuk menghapus pemberitahuan Anda sendiri tetapi tidak untuk orang lain
Donal Rafferty
1
Ya setuju dengan Donal untuk bagian kode lihat androidtrainningcenter.blogspot.in/2013/04/…
Tofeeq Ahmad
Lihat jawaban ini untuk cara menghapus pemberitahuan lain untuk API> = 18 - stackoverflow.com/a/25693210/1073832
Jim Vitek

Jawaban:

227

Gunakan kode berikut untuk membatalkan Pemberitahuan:

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

Dalam kode ini selalu ada id yang sama yang digunakan untuk notifikasi. Jika Anda memiliki pemberitahuan berbeda yang perlu dibatalkan, Anda harus menyimpan id yang Anda gunakan untuk membuat Pemberitahuan.

Janusz
sumber
9
Saya tidak tahu mengapa ini tidak lebih banyak disukai dan dipilih sebagai jawabannya. Ini adalah solusi yang saya cari. Terima kasih!
loeschg
3
Apa yang seharusnya menjadi id notifikasi di sini?
Deepak
Ini memang berhasil. Tetapi begitu saya membatalkan pemberitahuan, semua pemberitahuan berikutnya tidak menampilkan teks pesan pemberitahuan (yang saya setel menggunakan setContentText) meskipun saya menetapkan prioritas ke 2. Ada saran?
Iqbal
Tidak berfungsi jika bendera notifikasi disetel sebagai Notification.FLAG_NO_CLEAR
Anand Savjani
2
untuk semua dan jika Anda tidak tahu id yang mana, if (notificationManager! = null) {notificationManager.cancelAll (); }
mehmet
42

Dari: http://developer.android.com/guide/topics/ui/notifiers/notifications.html

Untuk menghapus pemberitahuan bilah status saat pengguna memilihnya dari jendela Pemberitahuan, tambahkan tanda "FLAG_AUTO_CANCEL" ke objek Pemberitahuan Anda. Anda juga dapat menghapusnya secara manual dengan cancel (int), meneruskan ID notifikasi, atau menghapus semua Notifikasi Anda dengan cancelAll ().

Tetapi Donal benar, Anda hanya dapat menghapus pemberitahuan yang Anda buat.

Chuck C.
sumber
11
Ini tidak akan membatalkan Notifikasi secara terprogram.
Janusz
4
tidak yakin apa yang dibicarakan Janusz tetapi batal (id) dan cancelAll () pasti berfungsi
Andrew G
32

Karena tidak ada yang memposting kode jawaban untuk ini:

notification.flags = Notification.FLAG_AUTO_CANCEL;

.. dan jika Anda sudah memiliki bendera, Anda dapat ATAU FLAG_AUTO_CANCEL seperti ini:

notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
NPike
sumber
4
Lebih baik begini:notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
Sebastian Nowak
Adakah yang bisa menjelaskan mengapa lebih baik seperti itu?
Prof
@Prof Ini kurang kode untuk tujuan yang sama, dan tidak berdampak pada kinerja.
Denny
1
@Denny Ini mengasumsikan flag notifikasi pertama didefinisikan di atas jadi itu adalah dua baris, bukan satu baris
Prof
20

Silakan coba metode default yang diberikan ke NotificationManager .

NotificationManager.cancelAll()untuk menghapus semua notifikasi. NotificationManager.cancel(notificationId)untuk menghapus pemberitahuan tertentu.

Rohit Suthar
sumber
1
Jika ada orang yang terjebak di NotificationManager karena tidak memiliki cancelmetode, cancelmetode ini tidak statis, jadi Anda memerlukan contoh NotificationManagerseperti ini: NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);Kemudian Anda dapat memanggil notificationManager.cancel(notificationId);seperti Rohit Suthar yang direferensikan dalam jawabannya. notificationIdhanyalah ID yang Anda notificationManager.notify(notificationId, mNotification)
berikan
8

Dimulai dengan API level 18 (Jellybean MR2), Anda dapat membatalkan Notifikasi selain milik Anda sendiri melalui 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());
}
Jim Vitek
sumber
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 (true)

ketika Anda mengklik notifikasi, buka aktivitas yang sesuai dan hapus notifikasi dari bilah notifikasi

Neeraj Singh
sumber
4

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

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Kemudian menerbitkan

notificationManager.cancel(NOTIFICATION_ID);

tidak berakhir dengan membatalkan Pemberitahuan, dan pemberitahuan masih muncul di bilah status. Dalam kasus khusus ini, Anda perlu mengeluarkan

stopForeground( true );

dari dalam layanan untuk mengembalikannya ke mode latar belakang dan sekaligus membatalkan notifikasi. Bergantian, Anda dapat mendorongnya ke latar belakang tanpa harus membatalkan pemberitahuan dan kemudian membatalkan pemberitahuan.

stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
Ian Gough
sumber
3

Jika Anda menggunakan NotificationCompat.Builder(bagian dari android.support.v4) maka cukup panggil metode objeknyasetAutoCancel

NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);

Beberapa pria melaporkan bahwa setAutoCancel()tidak berhasil untuk mereka, jadi Anda dapat mencoba cara ini juga

builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;

Perhatikan bahwa metode getNotification()ini tidak digunakan lagi !!!

sandalone
sumber
Pertanyaannya menanyakan bagaimana cara menghapusnya secara terprogram. setAutoCancel () membersihkannya ketika pengguna mengklik Notification. developer.android.com/reference/android/support/v4/app/…
S Fitz
@SFitz Tidak jelas dari pertanyaan apa yang dia inginkan. Saya mengerti bahwa dia ingin menghapus notifikasi saat pengguna mengkliknya.
sandalone
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);

ini berfungsi jika Anda menggunakan pembuat notifikasi ...

pengguna2962552
sumber
1

Sebenarnya seperti yang dijawab sebelum memulai dengan API Level 18 Anda dapat membatalkan Notifikasi yang diposting oleh aplikasi lain yang berbeda dari milik Anda menggunakan NotificationListenerService tetapi pendekatan itu tidak akan berfungsi lagi di Lollipop, berikut adalah cara untuk menghapus notifikasi yang juga mencakup API Lillipop.

if (Build.VERSION.SDK_INT < 21) {
    cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
    cancelNotification(sbn.getKey());
}
Alejandro Casanova
sumber
Saya tidak dapat menemukan metode cancelNotificationapa itu?
Denny
Ini adalah metode dari kelas NotificationListenerService, silakan periksa dokumentasi resmi developer.android.com/reference/android/service/notification/…
Alejandro Casanova
Bagaimana saya bisa menggunakannya di luar layanan?
Denny
0

Semua notifikasi (bahkan notifikasi aplikasi lainnya) dapat dihapus dengan mendengarkan 'NotificationListenerService' seperti yang disebutkan dalam NotificationListenerService Implementation

Dalam layanan, Anda harus menelepon cancelAllNotifications().

Layanan harus diaktifkan untuk aplikasi Anda melalui:

'Aplikasi & notifikasi' -> 'Akses aplikasi khusus' -> 'Akses notifikasi'.

Samantha
sumber
0

kode ini bekerja untuk saya:

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

    int notificationId = 1;
    notificationManager.cancel(notificationId);
  }
}
Wilson
sumber
0

Saya percaya yang paling TERBARU dan DIPERBARUI untuk AndroidX dan kompatibilitas mundur. Cara terbaik untuk melakukannya (Kotlin dan Java) harus dilakukan sebagai:

NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)

Atau untuk membatalkan semua notifikasi adalah:

NotificationManagerCompat.from(context).cancelAll()

Dibuat untuk AndroidX atau Pustaka Dukungan.

Xenolion
sumber