【问题标题】:Alarm Managers not cancel警报管理器不取消
【发布时间】:2013-12-30 00:28:16
【问题描述】:

我有三个警报管理器在一天的不同时间创建三个警报。这些警报在 mainactivity 的 oncreate 方法中。我希望仅在应用程序第一次启动时设置这些警报。但是因为它们在主要活动的oncreate方法中。每次重新创建我的主要活动时都会重新创建它们。我该如何解决这个问题?此外,我希望即使我的主要活动未激活或未聚焦,也能触发警报。

此外,我希望这些警报中的每一个在特定时间窗口内的不同时间每天重复。 setRepeatingAlarm 方法没有给我这种灵活性。关于如何实现这一点的任何想法?

Intent intent1 = new Intent(this, ReminderAlarmReceiver.class);
intent1.putExtra("alarm_message", "Alarm!");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent1,  PendingIntent.FLAG_NO_CREATE);

Intent intent2 = new Intent(this, ReminderAlarmReceiver.class);
intent2.putExtra("alarm_message", "Alarm!");
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(this, 2, intent2, PendingIntent.FLAG_NO_CREATE);

Intent intent3 = new Intent(this, EODAlarmReceiver.class);
intent3.putExtra("alarm_message", "Alarm!");    
PendingIntent pendingIntent3 = PendingIntent.getBroadcast(this, 3, intent3, 0);

// Get the AlarmManager service
AlarmManager alarmMgr1 = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmMgr1.set(AlarmManager.RTC_WAKEUP, cal0.getTimeInMillis(), pendingIntent);

AlarmManager alarmMgr2 = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmMgr2.set(AlarmManager.RTC_WAKEUP, cal2.getTimeInMillis(), pendingIntent2);        

AlarmManager alarmMgr3 = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmMgr3.set(AlarmManager.RTC_WAKEUP, cal4.getTimeInMillis(), pendingIntent3);

【问题讨论】:

    标签: android alarmmanager


    【解决方案1】:

    您应该创建一个单独的类,如here 所示,而不是在活动的 onCreate 方法中设置警报。这也可以解决您在活动失焦时遇到的问题。

    另外,要设置重复警报,您应该可以使用 AlarmManager 的setRepeating() 方法来完成。 Reference

    【讨论】:

    • 谢谢,这很有帮助。虽然,我不能完全用警报管理器的 setRepeating() 方法做我想做的事情。
    • @Rahin 此处链接的答案会在每次创建活动时运行代码。如果活动完成,它将再次运行代码。我认为这不是 OP 想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    相关资源
    最近更新 更多