BOOT_COMPLETED已经从AlarmManager执行了警报

时间:2013-11-14 05:35:16

标签: java android android-intent

我有来自AlarmManager的重复闹钟,每天上午7点触发。根据文档,有一种称为跳过警报的东西,一旦看到它落后于计划就会立即执行。

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

我有一个BOOT_COMPLETE接收器,它启动我的alarmService,主要问题是在说早上7点之后(因为警报将被执行),设备将在上午9:00或超过7:00的任何时间重新启动AM,警报第二次触发。虽然警报管理器正在做它想做的事情,但它并不是我所期望的。

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

这种模式可能有哪些方法?虽然我建议,方式,我不认为,这是标准的黑客,我很确定,你们大多数人都遇到过类似的问题。

2 个答案:

答案 0 :(得分: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);
 }

答案 1 :(得分:0)