Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AlarmManager:有没有办法取消所有设置的报警?_Android_Alarmmanager - Fatal编程技术网

Android AlarmManager:有没有办法取消所有设置的报警?

Android AlarmManager:有没有办法取消所有设置的报警?,android,alarmmanager,Android,Alarmmanager,我正在构建一个应用程序,为一周中的每一天(在特定的时间和分钟)设置2个警报,警报会一周接一周地重复 现在的重点是:如果用户更改警报,我需要取消之前设置的警报 有没有办法简单地取消我的应用程序设置的所有警报?我想你可以关注一下: 关于这个问题/答案: 如上所述,您不能要求AlarmManager告诉您其中有什么悬而未决的内容。但是我想你可以做一些和你想取消的一样的悬垂物 如果要取消以前的报警,则在pendingent中,您的标志应为pendingent.flag\u CANCEL\u CURREN

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

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


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

我想你可以关注一下:

关于这个问题/答案:


如上所述,您不能要求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
    将具有所有带有程序包名称的未决报警,因此您可以检查您的程序包。我不知道如何从代码中获取它。