1

我有一个来自 AlarmManager 的重复警报,每天早上 7:00 触发。根据文档,有一种叫做跳过警报的东西,一旦发现它落后于计划就会执行。

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
                pendingIntent);

我有一个 BOOT_COMPLETE 接收器,它启动我的警报服务,主要问题是在早上 7:00 之后(因为警报将被执行),设备在早上 9:00 或早上 7:00 之后的任何时间重新启动,第二次触发警报。尽管警报管理器正在做它应该做的事情,但是,这不是我所期望的。

一种可能的解决方案是将 last_executed_day 保存到首选项中,并在触发警报通知之前对其进行检查。

克服这种模式的可能方法是什么?虽然我建议,但我不认为这是标准的 hack,而且我很确定,你们中的大多数人都面临过类似的问题。

4

2 回答 2

2

您可以使用 Calendar.CompareTo Doc方法检查时间是否过去,然后您可以启动服务。您可以尝试这样的事情:

代码:

Calendar current = Calendar.getInstance();
Calendar calSet = Calendar.getInstance();

   calSet.set(Calendar.HOUR_OF_DAY, 7);
   calSet.set(Calendar.MINUTE, 0);
   calSet.set(Calendar.SECOND, 0);

   if(calSet.compareTo(current) <= 0){
    //If time passed add for tomo
    calSet.add(Calendar.DATE, 1);
   }

   setAlarm(calSet);
  }};

 private void setAlarm(Calendar cal){


  Intent intent = new Intent(getBaseContext(), CustomReceiver.class);
  PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 1, intent, 0);
  AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
  alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
                pendingIntent);
 }
于 2013-11-14T06:10:44.297 回答
0

这个链接可以帮助你,

http://it-ride.blogspot.in/2010/10/android-implementing-notification.html

如何设置 Recurring AlarmManager 以每天执行代码

于 2013-11-14T07:46:25.677 回答