web-dev-qa-db-ja.com

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

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

NotificationManagerで試してみましたが、機能しません。他にできる方法はありますか?

92
rahul

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

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

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

219
Janusz

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

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

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

41
Chuck C.

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

notification.flags = Notification.FLAG_AUTO_CANCEL;

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

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

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

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

17
Rohit Suthar

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());
}
8
Jim Vitek
 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
Neeraj Singh

NotificationCompat.BuilderAndroid.support.v4の一部)を使用している場合は、そのオブジェクトのメソッドsetAutoCancelを呼び出すだけです

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

一部の人はsetAutoCancel()が彼らのために機能しなかったと報告していたので、この方法も試してみてください

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

メソッドgetNotification()は廃止されました !!!

3
sandalone

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

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

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

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

詳細については、ここをクリックしてください http://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-Android.html

1
Dhina k

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

startForeground(NOTIFICATION_ID, notificationBuilder.build());

次に発行

notificationManager.cancel(NOTIFICATION_ID);

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

stopForeground( true );

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

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

NotificationListenerService Implementation で説明されているように、「NotificationListenerService」をリッスンすることで、すべての通知(他のアプリ通知も含む)を削除できます。

サービスでは、cancelAllNotifications()を呼び出す必要があります。

サービスは、次の方法でアプリケーションに対して有効にする必要があります。

「アプリと通知」->「特別なアプリアクセス」->「通知アクセス」。

0
Samantha