如何取消这个重复的警报?

我正在为用户写一些提醒。 用户将为他们的事件设置提醒,届时,重复的警报将被设置为触发状态栏通知。 但是我select通知或清除通知后,报警似乎不停。 我不知道在哪里取消这个重复的警报。 以下是一些代码:在我的主要活动中设置重复闹钟

alarmTime = Calendar.getInstance(); Intent intent = new Intent(this, AlarmReceive.class); PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmTime.add(Calendar.MINUTE,offset_time); //Schedule the alarm alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime.getTimeInMillis(), 30 * 1000, sender); 

在我的OnReceive方法中,我只是在状态栏中显示通知,并将标志设置为FLAG_AUTO_CANCEL

 manager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); // Set the icon, scrolling text and timestamp Notification notification = new Notification(R.drawable.medical, text, System.currentTimeMillis()); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, i, 0); notification.flags = Notification.FLAG_AUTO_CANCEL; manager.notify(R.string.service_text, notification); 

当用户select通知或清除通知时,如何停止警报?

使用与使用setRepeating()相同的PendingIntent ,在AlarmManager上调用cancel() setRepeating()

 Intent intent = new Intent(this, AlarmReceive.class); PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.cancel(sender); 

我尝试了各种方法,并没有得到它的工作,所以我决定做一个肮脏的伎俩。 当我想取消我的重复闹钟时,我使用创build闹钟的方法(因此replace旧闹钟),然后立即取消。 使用这个方法,如果布尔variables被设置为true,它会创build一个它将replace的报警,然后取消具有相同ID的replace:

 static void CancelRepeatingAlarm(Context context, boolean creating){ //if it already exists, then replace it with this one Intent alertIntent = new Intent(context, AlertReceiver.class); PendingIntent timerAlarmIntent = PendingIntent .getBroadcast(context, 100, alertIntent,PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); if (creating){ alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), INTERVAL, timerAlarmIntent); }else{ alarmManager.cancel(timerAlarmIntent); } 

在您的MainActivity ,设置闹钟时间。 如果您要使用多个警报,请使用SharedPreferences存储各自的ID。 这里是代码:

 PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, _id,intent, PendingIntent.FLAG_UPDATE_CURRENT); alarmManager = (AlarmManager) getSystemService(Activity.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); public static Context getContext() { return mContext; } mContext=mainactivity.this; 

在第二个Activity使用SharedPreferences相同ID。 在我的代码中,我从ArrayList的Alarm_id获得ID。 最后,您可以在MainActivity.getContext()使用MainActivity上下文。 这里是代码:

 AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intentAlarm = new Intent(AlarmListviewActivity.this, MainActivity.class); PendingIntent morningIntent = PendingIntent.getBroadcast(MainActivity.getContext(), Alarm_id.get(positon), intentAlarm, PendingIntent.FLAG_CANCEL_CURRENT); alarmManager.cancel(morningIntent); morningIntent.cancel();