it-swarm-eu.dev

Jak smazat oznámení v Androidu

Je možné oznámení vymazat programově?

Zkoušel jsem to s NotificationManager, ale jeho nefunguje. Existuje nějaký jiný způsob, jak to mohu udělat?

88
rahul

Pro zrušení oznámení použijte následující kód: 

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

V tomto kódu je pro oznámení vždy použito stejné ID. Pokud máte různá oznámení, která je třeba zrušit, musíte uložit ID, která jste použili k vytvoření oznámení.

215
Janusz

Od: http://developer.Android.com/guide/topics/ui/notifiers/notifications.html

Chcete-li smazat oznámení stavového řádku, když ho uživatel vybere z okna Oznámení, přidejte příznak „FLAG_AUTO_CANCEL“ do objektu oznámení. Můžete ji také vymazat ručně zrušením (int), předáním ID oznámení nebo zrušením všech oznámení pomocí příkazu cancelAll ().

Ale Donal má pravdu, můžete smazat pouze oznámení, která jste vytvořili.

41
Chuck C.

Vzhledem k tomu, že nikdo na tento kód neodpověděl:

notification.flags = Notification.FLAG_AUTO_CANCEL;

.. a pokud již máte příznaky, můžete takto OR FLAG_AUTO_CANCEL takto:

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

Vyzkoušejte výchozí metodu uvedenou v NotificationManager .

NotificationManager.cancelAll() pro odstranění všech oznámení. NotificationManager.cancel(notificationId) pro odstranění konkrétního oznámení.

13
Rohit Suthar

Počínaje úrovní API 18 (Jellybean MR2) můžete zrušit Oznámení jiná než vlastní prostřednictvím 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());
}
8
Jim Vitek

Pokud používáte NotificationCompat.Builder (část Android.support.v4), pak jednoduše volejte metodu objektu setAutoCancel

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

Někteří kluci hlásili, že setAutoCancel() pro ně nefungovalo, takže si to můžete také vyzkoušet

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

Všimněte si, že metoda getNotification() byla zamítnuta !!!

3
sandalone
 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)

když kliknete na oznámení, otevřete odpovídající aktivitu a odeberte oznámení z oznamovací lišty

3
Neeraj Singh

Vlastně jako odpověď před začátkem API Level 18 můžete zrušit oznámení odeslaná jinými aplikacemi differet než vaše vlastní pomocí NotificationListenerService, ale tento přístup již nebude fungovat na Lollipop, zde je způsob, jak odstranit oznámení týkající se také Lillipop API.

if (Build.VERSION.SDK_INT < 21) {
    cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
    cancelNotification(sbn.getKey());
}
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);

to funguje, pokud používáte tvůrce oznámení ...

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

pro více informací klikněte zde http://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-Android.html

1
Dhina k

Všechna oznámení (i jiná oznámení o aplikacích) lze odstranit pomocí naslouchání 'NotificationListenerService', jak je uvedeno v NotificationListenerService Implementation

Ve službě musíte zavolat cancelAllNotifications().

Služba musí být pro vaši aplikaci povolena:

„Aplikace a oznámení“ -> „Přístup ke speciální aplikaci“ -> „Přístup k oznámením“.

0
Samantha

Pokud generujete oznámení ze služby, která je spuštěna v popředí pomocí

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Pak vydává

notificationManager.cancel(NOTIFICATION_ID);

neskončí zrušení oznámení a oznámení se stále zobrazuje ve stavovém řádku. V tomto konkrétním případě budete muset vydat

stopForeground( true );

vrátit zpět do režimu pozadí a současně zrušit oznámení. Případně jej můžete posunout do pozadí, aniž byste jej museli zrušit a oznámení zrušit.

stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
0
Ian Gough