【问题标题】:Set Repeated alarm at specific time every day每天在特定时间设置重复闹钟
【发布时间】:2011-10-29 12:40:14
【问题描述】:

我尝试使用闹钟管理器在每天的特定时间运行闹钟。 我正在使用此代码

Intent intent = new Intent(AlarmSettings.this, AlarmService.class);
                        intent.putExtra("i", i);
PendingIntent mAlarmSender = PendingIntent.getService(AlarmSettings.this, Id, intent, 0);

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);

am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),Calendar.getInstance().getTimeInMillis()+(24*60*60*1000), mAlarmSender);}

问题出在 如果 cal.getTimeInMillis() 值在过去,警报会立即运行,我不知道为什么,当 cal.getTimeInMillis() 值在未来时,它会在当时正确运行。

我需要让它在每天的特定时间运行。

【问题讨论】:

    标签: android alarmmanager alarm


    【解决方案1】:
    // every day at 9 am
    Calendar calendar = Calendar.getInstance();
    
    // if it's after or equal 9 am schedule for next day
    if (Calendar.getInstance().get(Calendar.HOUR_OF_DAY) >= 9) {
        calendar.add(Calendar.DAY_OF_YEAR, 1); // add, not set!
    }
    calendar.set(Calendar.HOUR_OF_DAY, 9);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    
    alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(),
                AlarmManager.INTERVAL_DAY, pi);
    
    // alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(),
    // AlarmManager.INTERVAL_DAY, pi);
    

    【讨论】:

      【解决方案2】:

      看起来像你的电话

      setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
      

      尝试设置适当的 triggerAtTime(将来) - 像

      Calendar.getInstance().getTimeInMillis()+(24*60*60*1000)
      

      第三个参数(间隔)显然应该是你的间隔,比如

      24*60*60*1000
      

      【讨论】:

      • 谢谢你,我知道我必须在paset中设置triggerAtTime在未来没有
      【解决方案3】:

      这对我帮助很大,我有一个案例,我也在使用分钟,并提出了以下小修改:

      /* Create calendar and set desired time before this*/
      
      // Compare the current time milliseconds with the desired calendar time milliseconds
      if (java.util.Calendar.getInstance().getTimeInMillis() >= 
                  calendar.getTimeInMillis() ) {
          calendar.add(Calendar.DAY_OF_YEAR, 1);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-29
        • 2013-08-19
        • 1970-01-01
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多