プログラムで通知をクリアすることはできますか?
NotificationManager
で試してみましたが、機能しません。他にできる方法はありますか?
次のコードを使用して、通知をキャンセルします。
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
このコードでは、通知に常に同じIDが使用されます。キャンセルする必要がある別の通知がある場合は、通知の作成に使用したIDを保存する必要があります。
From: http://developer.Android.com/guide/topics/ui/notifiers/notifications.html
ユーザーが通知ウィンドウから選択したときにステータスバーの通知をクリアするには、「FLAG_AUTO_CANCEL」フラグを通知オブジェクトに追加します。また、cancel(int)で手動でクリアして通知IDを渡すか、cancelAll()ですべての通知をクリアすることもできます。
ただし、Donalは正しいです。作成した通知のみをクリアできます。
これに対するコード回答を誰も投稿していないため:
notification.flags = Notification.FLAG_AUTO_CANCEL;
..すでにフラグがある場合は、次のようにOR FLAG_AUTO_CANCELを実行できます。
notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
NotificationManager に提供されているデフォルトのメソッドを試してください。
NotificationManager.cancelAll()
すべての通知を削除します。 NotificationManager.cancel(notificationId)
は特定の通知を削除します。
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());
}
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)
通知をクリックすると、対応するアクティビティが開き、通知バーから通知が削除されます
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()
は廃止されました !!!
実際に、APIレベル18で開始する前に回答したように、NotificationListenerServiceを使用して、他のアプリとは異なるアプリによって投稿された通知をキャンセルできますが、そのアプローチはLollipopでは機能しなくなりました。
if (Build.VERSION.SDK_INT < 21) {
cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
cancelNotification(sbn.getKey());
}
// Get a notification builder that's compatible with platform versions
// >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(
this);
builder.setSound(soundUri);
builder.setAutoCancel(true);
これは、通知ビルダーを使用している場合に機能します...
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
フォアグラウンドで開始されたサービスから通知を生成する場合
startForeground(NOTIFICATION_ID, notificationBuilder.build());
次に発行
notificationManager.cancel(NOTIFICATION_ID);
通知がキャンセルされることはなく、通知は引き続きステータスバーに表示されます。この特定のケースでは、発行する必要があります
stopForeground( true );
サービス内からバックグラウンドモードに戻し、同時に通知をキャンセルします。または、通知をキャンセルせずにバックグラウンドにプッシュしてから、通知をキャンセルすることもできます。
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
NotificationListenerService Implementation で説明されているように、「NotificationListenerService」をリッスンすることで、すべての通知(他のアプリ通知も含む)を削除できます。
サービスでは、cancelAllNotifications()
を呼び出す必要があります。
サービスは、次の方法でアプリケーションに対して有効にする必要があります。
「アプリと通知」->「特別なアプリアクセス」->「通知アクセス」。