【问题标题】:Android AlarmManager triggered immediately even with correct parameters?即使参数正确,Android AlarmManager 也会立即触发?
【发布时间】:2017-04-06 15:59:48
【问题描述】:

我正在从我的主 Activity 的 onCreate 中设置一个 AlamManager。

方法如下

public void scheduleAdsUpdateAlarm() {
    long THEE_HOURS = 3 * 60 * 60 * 1000;
    long THREE_MINUTES= 3*60*1000;
    long UNTIL_FIRST_TRIGGER = THREE_MINUTES;

    // Construct an intent that will execute the AlarmReceiver
    Intent intent = new Intent(getApplicationContext(), AdsUpdateAlarmReceiver.class);

    // Create a PendingIntent to be triggered when the alarm goes off
    final PendingIntent pIntent = PendingIntent.getBroadcast(this, AdsUpdateAlarmReceiver.REQUEST_CODE,
            intent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);

    if(alarm != null){
        alarm.cancel(pIntent);
        alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, UNTIL_FIRST_TRIGGER,
                THREE_MINUTES, pIntent);
    }
}

如您所见,警报设置为每三小时运行一次,并在三分钟后首次启动。

问题是当 onCreate 和下面的警报设置被调用时警报立即响起。我不明白我做错了什么?

【问题讨论】:

    标签: android alarmmanager


    【解决方案1】:
    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, UNTIL_FIRST_TRIGGER,
    THREE_MINUTES, pIntent); 
    

    应该改为:

    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + UNTIL_FIRST_TRIGGER, THREE_MINUTES, pIntent);
    

    因为alarm.setInexactRepeating 中的第二个参数不是从现在开始的毫秒数,而是一个实际的时间值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 2020-04-27
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      相关资源
      最近更新 更多