当前位置: 首页 > 知识库问答 >
问题:

app关闭后如何取消报警

胡元明
2023-03-14
ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>();
AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
...
Intent intent = new Intent(this, AlertReceiver.class);
Long cal = new GregorianCalendar().getTimeInMillis() + sms_in_x_minutes * 60 * 1000;
PendingIntent i1 = PendingIntent.getBroadcast(this, intent_id++, intent, 0);
am.set(AlarmManager.RTC_WAKEUP, cal, i1);
intentArray.add(i1);
private void cancelAlarms(){
    if(intentArray.size()>0){
        for(int i=0; i<intentArray.size(); i++){
            am.cancel(intentArray.get(i));
        }
        intentArray.clear();
    }
}

我的猜测是,intentarrayam在关闭应用程序后为空,并且pendingintents没有保存。但我不知道怎么解决这个问题。

共有1个答案

董高逸
2023-03-14

不要保留待定意图数组。当您正确诊断时,应用程序关闭后数组为空,这将导致当您试图再次访问它们时崩溃。

只设置最早的警报。将警报的ID保存到临时存储(例如SharedPreferences)。(如果更简单的话,您也可以使用一个常量值作为ID,因为您现在只需要考虑一个警报)

当警报触发时,可以将下一个最早的警报设置为执行的第一个任务。

 类似资料:
  • 基本上,我试图建立一个报警应用程序,其中有一些预定义的日期和时间按钮。我一开始就尝试使用AlarmManager和广播接收器,但都不起作用。所以,我使用了alarmManager的前台服务,但仍然,当应用程序被摧毁时,警报不会发出。我是个新手。我试着在网上搜索,但我没有运气。希望这里有很多人来帮助我。提前谢了。 myservice.java AlarmReceiver.java

  • 我有一个TcpListener,可以启动 停下来 如何取消通过调用启动的任务? 通过使循环条件,我可以确保任务将在条件评估时停止。 然而,这只会发生在接受新连接之后。 我如何摆脱等待?如果关联的套接字在等待时关闭,会发生什么?谢谢你的回答!

  • 我有一种在shell中执行此任务的方法:如何使kafka消费者从上次消耗的偏移量读取,而不是从开始读取 但是,我愿意在Python中这样做,使用 我找不到任何关于这种情况的api。 http://kafka-python.readthedocs.io/en/latest/apidoc/KafkaConsumer.html

  • 问题内容: 我希望能够在一定时间后或在特定事件(例如)后使用Javascript自动关闭警报框。从我的研究来看,内置函数似乎不可能实现。有没有办法覆盖它并控制它打开的对话框? 另外,我不希望显示隐藏的div作为警报的替代。我需要一个实际的对话框。 问题答案: 如前所述,您确实无法做到这一点。您可以使用UI框架在窗口内进行模式对话框,也可以具有弹出窗口,该脚本具有超时后自动关闭的脚本…每个方面都有负

  • 我有下面的代码,我想在它上面关闭preparedStatement对象,因为它是作为一个来自sonar的bug提出的。 如何关闭preparedStatement对象?我看到的大多数示例大多使用try/finally或try with resources,然后创建对象并使用它try and close in finally。然而,在这里,对象是在单独的函数中创建的,它从那里返回,然后被使用。所以创

  • 问题内容: 我的警报消息有问题。它正常显示,当用户按下(关闭)时,我可以将其关闭,但是当用户尝试再次显示它(例如,单击按钮事件)时,它不会显示。(此外,如果我将此警报消息打印到控制台,则等于。)我的代码在这里: 事件: PS! 仅在发生某些事件(例如,单击按钮)后才需要显示警报消息。还是我做错了什么? 问题答案: 数据删除会完全删除该元素。请改用jQuery的.hide()方法。 快速修复方法: