Android为一天中的特定时间设置重复报警

Android为一天中的特定时间设置重复报警,android,intervals,repeatingalarm,Android,Intervals,Repeatingalarm,我正在尝试设置一个重复警报,该警报将每分钟下载一个文件,但仅在8:00和22:00之间。我觉得我真的很接近,但我看不到我犯的错误。当前广播接收器未激活。如果手动将重复报警设置为alarmManager.setRepeating(alarmManager.RTC_WAKEUP,System.currentTimeMillis()+10000,60000,PendingEvent)它工作正常。任何指导都将不胜感激 protected void scheduleNextUpdate() {

我正在尝试设置一个重复警报,该警报将每分钟下载一个文件,但仅在8:00和22:00之间。我觉得我真的很接近,但我看不到我犯的错误。当前广播接收器未激活。如果手动将重复报警设置为alarmManager.setRepeating(alarmManager.RTC_WAKEUP,System.currentTimeMillis()+10000,60000,PendingEvent)它工作正常。任何指导都将不胜感激

protected void scheduleNextUpdate()
      {
        Intent intent = new Intent("TEST");
        PendingIntent pendingIntent =
            PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        int updateInterval =  1;
        long nextUpdate =(60000 * updateInterval);

        long currentTimeMillis = System.currentTimeMillis();


        long nextUpdateTimeMillis = currentTimeMillis + nextUpdate;
        Time nextUpdateTime = new Time();
        nextUpdateTime.set(nextUpdateTimeMillis);

        if (nextUpdateTime.hour < 8 || nextUpdateTime.hour > 22)
        {
          nextUpdateTime.hour = 8;
          nextUpdateTime.minute = 0;
          nextUpdateTime.second = 0;
          nextUpdateTimeMillis = nextUpdateTime.toMillis(false) + DateUtils.DAY_IN_MILLIS;
        }

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+10000, nextUpdateTimeMillis,pendingIntent);

        boolean alarmUp = (PendingIntent.getBroadcast(this, 0, 
                new Intent("TEST"), 
                PendingIntent.FLAG_NO_CREATE) != null);

        if (alarmUp)
        {
            Log.d("myTag", "Alarm is already active");
        }
  }
protectedvoid scheduleNextUpdate()受保护
{
意向=新意向(“测试”);
下垂的,下垂的=
PendingEvent.getBroadcast(this,0,intent,PendingEvent.FLAG_UPDATE_CURRENT);
int updateInterval=1;
long nextUpdate=(60000*updateInterval);
long currentTimeMillis=System.currentTimeMillis();
long nextUpdateTimeMillis=currentTimeMillis+nextUpdate;
Time nextUpdateTime=新时间();
nextUpdateTime.set(nextUpdateTimeMillis);
如果(nextUpdateTime.hour<8 | | nextUpdateTime.hour>22)
{
nextUpdateTime.hour=8;
nextUpdateTime.minute=0;
nextUpdateTime.second=0;
nextUpdateTimeMillis=nextUpdateTime.toMillis(false)+DateUtils.DAY(单位:毫秒);
}
AlarmManager AlarmManager=(AlarmManager)getSystemService(报警服务);
alarmManager.setRepeating(alarmManager.RTC_唤醒,System.currentTimeMillis()+10000,nextUpdateTimeMillis,PendingContent);
布尔值alarmUp=(PendingEvent.getBroadcast)(此,0,
新意图(“测试”),
PendingEvent.FLAG_NO_CREATE)!=null);
如果(报警上升)
{
Log.d(“myTag”,“报警已激活”);
}
}

您应该在8:00和22:00之间重新设置闹钟,如您所述:

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+10000, 60000,pendingIntent); 
这将每分钟重复一次。但您必须明确取消警报。你可以在下载完成后取消它,检查它是否已经22:00了。或者在22:00时触发另一个警报。否则它不会停止

使用
alarmManager.cancel(挂起内容)

此处描述:


希望这能有所帮助。

您应该在8:00到22:00之间重新设置闹钟,就像您提到的:

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+10000, 60000,pendingIntent); 
这将每分钟重复一次。但您必须明确取消警报。你可以在下载完成后取消它,检查它是否已经22:00了。或者在22:00时触发另一个警报。否则它不会停止

使用
alarmManager.cancel(挂起内容)

此处描述:


希望这有帮助。

所以应该在if语句中加上if(nextUpdateTime.hour>=8){alarmManager.setRepeating(alarmManager.RTC_WAKEUP,System.currentTimeMillis()+10000,60000,PendingEvent);}if(nextUpdateTime.hour>22){cancel(PendingEvent操作)}这样使用:
alarmManager.cancel(PendingEvent)scheduleNextUpdate()
方法。所以你还需要一个闹钟来报时。然后,您可以取消报警作为一种解决方法,我每分钟都会重复报警,但在广播中,我有if/else语句来确定是否在特定时间段内下载该文件。我不确定这是否是一个好的实践,但它是有效的……所以应该在if语句中加上if(nextUpdateTime.hour>=8){alarmManager.setRepeating(alarmManager.RTC_WAKEUP,System.currentTimeMillis()+10000,60000,PendingEvent);}if(nextUpdateTime.hour>22){cancel(PendingEvent操作)}这样使用:
alarmManager.cancel(PendingEvent)scheduleNextUpdate()
方法。所以你还需要一个闹钟来报时。然后,您可以取消报警作为一种解决方法,我每分钟都会重复报警,但在广播中,我有if/else语句来确定是否在特定时间段内下载该文件。我不确定这是否是一个好的做法,但它的工作。。。。