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

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)来取消我的重复报警。 但是,我不明白在哪里放这个代码。 只有当用户点击通知或解散通知时,我才需要取消重复提醒。 谢谢你的帮助!

  • 如何通过声音和振动来使用通知?
  • NotificationManager getActiveNotifications()用于较旧的设备
  • 如何检测通知是否已被解除?
  • 如何使用声音和振动通知?
  • 我相信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 ); } 

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