Android AlarmManager:有没有办法取消所有设置的报警?
我正在构建一个应用程序,为一周中的每一天(在特定的时间和分钟)设置2个警报,警报会一周接一周地重复 现在的重点是:如果用户更改警报,我需要取消之前设置的警报Android AlarmManager:有没有办法取消所有设置的报警?,android,alarmmanager,Android,Alarmmanager,我正在构建一个应用程序,为一周中的每一天(在特定的时间和分钟)设置2个警报,警报会一周接一周地重复 现在的重点是:如果用户更改警报,我需要取消之前设置的警报 有没有办法简单地取消我的应用程序设置的所有警报?我想你可以关注一下: 关于这个问题/答案: 如上所述,您不能要求AlarmManager告诉您其中有什么悬而未决的内容。但是我想你可以做一些和你想取消的一样的悬垂物 如果要取消以前的报警,则在pendingent中,您的标志应为pendingent.flag\u CANCEL\u CURREN
有没有办法简单地取消我的应用程序设置的所有警报?我想你可以关注一下: 关于这个问题/答案:
如上所述,您不能要求AlarmManager告诉您其中有什么悬而未决的内容。但是我想你可以做一些和你想取消的一样的悬垂物 如果要取消以前的报警,则在
pendingent
中,您的标志应为pendingent.flag\u CANCEL\u CURRENT
。如果已经创建了新的pendingent
,它将阻止生成新的pendingent。并确保在设置警报之前,只需取消相同的pendingent
,然后设置警报。你应该这样做:
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);
这保证了在设置报警之前,将使用相同的pendingent
取消所有以前的报警
希望你得到这个 我在取消警报时遇到了同样的问题,并解决了它。你应该做的只是做-
创建报警时,将PendingEvent对象的请求代码保存到共享首选项
稍后,当您要取消报警时,请使用相同的请求代码创建相同的PendingEvent(显然来自共享首选项)
调用AlarmManager的cancel()并在其中传递PendingEvent对象,报警将被取消
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();
}
我需要澄清一下。cancel()文档中说“删除任何具有匹配意图的报警”。这是否意味着请求代码im getBroadcast(上下文上下文、int requestCode、Intent Intent、int标志)也需要相同?请澄清。您好,文档中没有太多关于requestCode
。但是如果您看到getBroadcast
,其中说,它检索一个pendingent
。因此,据我所知,如果您放入不同的requestCode
s,那么您将得到两个不同的pendingent
s,因此在取消时,它将是另一个pendingent
,而不是所需的!也要调查一下。谢谢你回复我。让我再看一遍文档。我也没有看到请求一个类安排的警报列表。有什么想法吗?很抱歉,我没有得到它:/若要取消警报,您需要重新创建准确的挂起内容
,我想无法直接从代码中检索它。您仍然可以在shell中看到挂起的警报!如果您熟悉adb shell,您可以通过以下命令来实现:adb shell dumpsys alarm>log.txt
其中log.txt
将具有所有带有程序包名称的未决报警,因此您可以检查您的程序包。我不知道如何从代码中获取它。