Android:通知バーから通知を削除する


回答:


182

これは非常に簡単です。cancelまたはcancelAll、NotificationManager を呼び出す必要があります。cancelメソッドのパラメーターは、キャンセルする通知のIDです。

APIを参照してください:http : //developer.android.com/reference/android/app/NotificationManager.html#cancel(int)


おかげRoflcoptr :)私はここでそれを見つけた:stackoverflow.com/questions/2839727/...
Nezir

3
private static final int MY_NOTIFICATION_ID = 1234; 文字列ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager; mNotificationManager =(NotificationManager)getSystemService(ns); mNotificationManager.notify(MY_NOTIFICATION_ID、notification); サンプルコードは完全ではありません。通知の作成方法によって異なります。通知を作成したときと同じIDを使用して通知をキャンセルしてください。キャンセルするには:mNotificationManager.cancel(MY_NOTIFICATION_ID);
Nezir 2010

あなたはその日を救った!、あなたのような人々が複雑な問題に対する複雑な答えではないにもかかわらず、あなたのような人々を読むことは喜びです。どうもありがとうございました。
e-info128 16

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

1
システムによって作成された通知についてはどうですか?
Zaid Mirza

219

あなたはこの簡単なコードを試すことができます

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

19
シンプルで正確であり、直接要点がわかるため、これは正解です。
ZeroTek 2013

1
こんにちは、これが正解です。ただし、通知トレイは表示されたままです。それを隠す方法はありますか?たとえば、通知に関連付けられている2つのアクションがあります。キャンセルと完了です。これらのアクションのいずれかが実行されると、通知を削除します。ただし、これを行うと通知が削除されるだけですが、通知トレイは表示されたままになります。
Shajeel Afzal 2014

1
1行、通知IDを呼び出すだけです:public void delNoti(int id){((NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE))。cancel(id);}
phnghue

ctxは必要ありません。NotificationManager nMgr =(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
canbax

61

cancelAll通知マネージャーを呼び出すこともできるため、通知IDについて心配する必要もありません。

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

編集:私は反対票を投じられたので、おそらくこれはあなたのアプリケーションから通知を削除するだけであることを指定する必要があります。


フォアグラウンドには通知マネージャはありません:startForeground(NOTIFICATION_ID, mNotification);
user924

12

次のコードのように単にsetAutoCancel(True)を設定します。

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 2016

これは求められたものではありません。質問:「イベントの通知バーからその通知を削除する方法のサンプルが必要ですか?」
デビッド

12

これは役立ちます:

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

これにより、アプリによって行われたすべての通知が削除されます

呼び出して通知を作成した場合

startForeground();

Service内で呼び出す必要がある場合があります

stopForeground(false);

まず、通知をキャンセルします。


可能であれば、この質問にも回答できますか?私はあなたが提案したのと同じことをしましたが、Android 10では動作しません。質問はここをクリックしてください
Maulik Dodia

7

を使用してフォアグラウンドで開始されたサービスから通知を生成する場合

startForeground(NOTIFICATION_ID, notificationBuilder.build());

次に発行

notificationManager.cancel(NOTIFICATION_ID);

通知がキャンセルされず、ステータスバーに通知が表示されます。この特定のケースでは、これらを2つの方法で解決します。

1>サービス内でstopForeground(false)を使用:

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

2番目の方法は、通知だけでなくプレーヤーも削除するため、音楽プレーヤーの通知をより優先します... !!


ご回答有難うございます!使用するstopForeground(true); manager.cancelAll();ことで解決しました!
chenshuiluke 16

3

これを試してください、

public void removeNotification(Context context, int notificationId) {      
    NotificationManager nMgr = (NotificationManager) context.getApplicationContext()
            .getSystemService(Context.NOTIFICATION_SERVICE);
    nMgr.cancel(notificationId);
}

可能であれば、この質問にも回答できますか?私はあなたが提案したのと同じことをしましたが、Android 10では動作しません。質問はここをクリックしてください
Maulik Dodia


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

IDを呼び出すだけです:

public void delNoti(int id) {((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).cancel(id);}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.