如何检测通知是否被解雇?

Android中有什么方法可以检测用户向左滑动通知并删除它吗? 我正在使用警报pipe理器来设置重复警报,并且我需要重复警报以在用户取消通知时停止。 这是我的代码:

设置重复提醒:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), repeatFrequency, displayIntent); 

我的通知代码:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Get the notification ID. int notifID = getIntent().getExtras().getInt("Reminder_Primary_Key"); //Get the name of the reminder. String reminderName = getIntent().getExtras().getString("Reminder_Name"); //PendingIntent stores the Activity that should be launched when the user taps the notification. Intent i = new Intent(this, ViewLocalRemindersDetail.class); i.putExtra("NotifID", notifID); i.putExtra("notification_tap", true); //Add FLAG_ACTIVITY_NEW_TASK to stop the intent from being launched when the notification is triggered. PendingIntent displayIntent = PendingIntent.getActivity(this, notifID, i, Intent.FLAG_ACTIVITY_NEW_TASK); NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Notification notif = new Notification(R.drawable.flag_red_large, reminderName, System.currentTimeMillis()); CharSequence from = "Here's your reminder:"; CharSequence message = reminderName; notif.setLatestEventInfo(this, from, message, displayIntent); //Pause for 100ms, vibrate for 250ms, pause for 100ms, and vibrate for 500ms. notif.defaults |= Notification.DEFAULT_SOUND; notif.vibrate = new long[] { 100, 250, 100, 500 }; nm.notify(notifID, notif); //Destroy the activity/notification. finish(); } 

我知道我需要调用alarmManager.cancel(displayIntent)来取消我的重复报警。 但是,我不明白在哪里放这个代码。 只有当用户点击通知或解散通知时,我才需要取消重复提醒。 谢谢你的帮助!

Solutions Collecting From Web of "如何检测通知是否被解雇?"

我相信Notification.deleteIntent是你正在寻找的。 该文件说:

意图在用户明确解除通知时执行,或者使用“全部清除”button或单独滑动。 这可能不应该是启动一个活动,因为其中几个将同时发送。

对于所有那些未来的人 – 你可以注册一个广播接收器来侦听通知删除inents。

创build一个新的广播接收机:

 public class NotificationBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action == null || !action.equals(Config.NotificationDeleteAction)) { return; } // Do some sweet stuff int x = 1; } } 

在您的应用程序类中注册广播接收器:

“如果您的应用程序的目标是API级别26或更高,则不能使用清单来声明大多数隐式广播的接收者(广播不专门针对您的应用程序)”。

Android文档。

  registerReceiver( new NotificationBroadcastReceiver(), new IntentFilter(Config.NotificationDeleteAction) ); 

你可能注意到了静态variablesConfig.NotificationDeleteAction 。 这是您的通知的唯一string标识符。 它通常遵循以下{namespace} {actionName}约定:

you.application.namespace.NOTIFICATION_DELETE

在通知构build器上设置删除意图:

 notificationBuilder ... .setDeleteIntent(createDeleteIntent()) ... 

其中, createDeleteIntent是以下方法:

 private PendingIntent createDeleteIntent() { Intent intent = new Intent(); intent.setAction(Config.NotificationDeleteAction); return PendingIntent.getBroadcast( context, 0, intent, PendingIntent.FLAG_ONE_SHOT ); } 

您的注册广播接收机应在您的通知被解除时收到意图。