Android AlarmManager:有没有办法取消所有闹钟设置?

时间:2013-07-10 11:49:53

标签: android alarmmanager

我正在构建一个应用程序,为一周中的每一天(某个小时和分钟)设置2个警报,警报会一周又一周地重复。

现在重点是:如果用户更改了警报,我将需要取消之前设置的警报。

有没有办法简单地取消我的应用程序设置的所有闹钟?

3 个答案:

答案 0 :(得分:16)

如果要取消之前的警报,那么在PendingIntent中,您的标志应为PendingIntent.FLAG_CANCEL_CURRENT。如果已经创建了PendingIntent,它将阻止生成新的PendingIntent。并确保在设置闹钟之前取消相同的PendingIntent并在此之后设置闹钟。你应该这样试试:

AlarmManager 2AlarmsInWeekAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getService/getActivity(context, int, intent, PendingIntent.FLAG_CANCEL_CURRENT);

2AlarmsInWeekAlarmManager.cancel(pendingIntent);

然后你可以使用set或setRepeating方法。 在你的情况下它应该是

2AlarmsInWeekAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, "timeInMillis", "repetitionTimeInMillis", pendingintent);

这可以保证在设置闹钟之前将使用相同的PendingIntent取消所有先前的闹钟。

希望你能得到这个!

答案 1 :(得分:9)

我认为你可以关注:AlarmManager.Cancel

关于那个问题/答案:Android: Get all PendingIntents set with AlarmManager

如前所述,你不能要求AlarmManager告诉你PendingIntent是什么。但我认为你可以使一些PendingIntent类似于你要取消的那个;)。

答案 2 :(得分:0)

我在取消警报时遇到了同样的问题,并已解决。您应该做的只是做-

  1. 创建警报时,保存 PendingIntent 对象的请求代码(共享首选项)。
  2. 稍后,当您想要取消警报时,请使用相同的请求代码(显然是共享首选项)创建相同的待定意图
  3. 调用AlarmManager的cancel()并在其中传递PendingIntent对象,警报将被取消。

    private void cancelAlarm(int requestCode) {
    
    AlarmManager alarmManager2 = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    
    PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getApplicationContext(),requestCode,new Intent(this, MyBroadCastReceiver.class),0);
    alarmManager2.cancel(pendingIntent2);
    
    Toast.makeText(getApplicationContext(), "Alarm Cancelled - "+ requestCode, Toast.LENGTH_LONG).show();
    

    }