Androidで通知をクリアする方法


96

プログラムで通知をクリアすることは可能ですか?

私はそれを試しましたNotificationManagerが、機能しません。他に方法はありますか?


12
自分の通知をクリアすることは可能ですが、他のユーザーの通知をクリアすることはできません
Donal Rafferty

1
はい、コードの一部についてDonalに同意します。androidtrainningcenter.blogspot.in
2013/04 /…を

API> = 18の他の通知をクリアする方法については、この回答を参照してください-stackoverflow.com/a/25693210/1073832
Jim Vitek

回答:


227

次のコードを使用して、通知をキャンセルします。

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

このコードでは、通知に使用される同じIDが常にあります。キャンセルする必要のあるさまざまな通知がある場合は、通知の作成に使用したIDを保存する必要があります。


9
これがこれ以上賛成されず、回答として選ばれた理由がわかりません。これは私が探していた解決策でした。ありがとう!
loeschg 2013年

3
ここの通知IDは何ですか?
Deepak、2015年

これは確かに機能します。しかし、通知をキャンセルするとsetContentText、優先度を2に設定しても、後続のすべての通知に通知メッセージテキスト(を使用して設定)が表示されません。
Iqbal

通知フラグがNotification.FLAG_NO_CLEARとして設定されている場合は機能しません
Anand Savjani

2
すべての場合、およびIDがわからない場合は、if(notificationManager!= null){notificationManager.cancelAll(); }
mehmet 2017

42

送信元http : //developer.android.com/guide/topics/ui/notifiers/notifications.html

ユーザーが[通知]ウィンドウからステータスバー通知を選択したときにそれをクリアするには、 "FLAG_AUTO_CANCEL"フラグを通知オブジェクトに追加します。また、cancel(int)で手動でクリアして通知IDを渡すか、cancelAll()ですべての通知をクリアすることもできます。

しかし、Donalは正解です。作成した通知のみをクリアできます。


11
これにより、プログラムによって通知がキャンセルされることはありません。
Janusz

4
Januszが何を話しているかはわかりませんが、cancel(id)とcancelAll()は確かに機能します
Andrew G

32

誰もこれに対するコード回答を投稿していないので:

notification.flags = Notification.FLAG_AUTO_CANCEL;

..すでにフラグがある場合は、次のようにOR FLAG_AUTO_CANCELできます。

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

4
これは、より良い、この方法です:notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
セバスチャン貰える

なぜそれがそのように優れているのか誰かが説明できますか?
2017

@Prof同じ目的のためのコードは少なく、パフォーマンスに影響を与えません。
デニー

1
@Dennyこれは、最初の通知フラグが上記で定義されていると想定しているため、1行ではなく2行になります
教授、

20

NotificationManagerに提供されているデフォルトのメソッドを試してください。

NotificationManager.cancelAll()すべての通知を削除します。 NotificationManager.cancel(notificationId)特定の通知を削除します。


1
cancelメソッドを持たないNotificationManagerで行き詰まっている場合、cancelメソッドは静的ではないため、次のNotificationManagerようなインスタンスが必要になります。その回答で参照されているRohit SutharのようにNotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);呼び出すことができますnotificationManager.cancel(notificationId);notificationId単に渡したIDですnotificationManager.notify(notificationId, mNotification)
Mira_Cole 2018年

8

APIレベル18(Jellybean MR2)以降、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());
}

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)

通知をクリックすると、対応するアクティビティを開き、通知バーから通知を削除します


4

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

startForeground(NOTIFICATION_ID, notificationBuilder.build());

次に発行

notificationManager.cancel(NOTIFICATION_ID);

通知がキャンセルされることはなく、通知は引き続きステータスバーに表示されます。この特定のケースでは、発行する必要があります

stopForeground( true );

サービス内からバックグラウンドモードに戻し、同時に通知をキャンセルします。または、通知をキャンセルせずにバックグラウンドにプッシュしてから、通知をキャンセルすることもできます。

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

3

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()は廃止されていることに注意しください!!!


プログラムでそれをクリアする方法を質問しました。setAutoCancel()は、ユーザーが通知をクリックしたときにそれをクリアします。developer.android.com/reference/android/support/v4/app/...
Sフィッツ

@SFitz彼が何を望んでいるかは質問からは明らかではありません。ユーザーがクリックしたときに通知をクリアしたいことを理解しました。
Sandalone 2015

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

これは、通知ビルダーを使用している場合に機能します...



1

実際、APIレベル18で始める前に回答したように、NotificationListenerServiceを使用して、独自のアプリとは異なる他のアプリによって投稿された通知をキャンセルできますが、そのアプローチはLollipopでは機能しなくなります。LillipopAPIも対象とする通知を削除する方法は次のとおりです。

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

方法がわかりませんcancelNotification
デニー

これはNotificationListenerServiceクラスのメソッドです。公式ドキュメントdeveloper.android.com/reference/android/service/notification/…
Alejandro Casanova

サービスの外でどのように使用できますか?
デニー

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.