即使使用正确的参数,Android AlarmManager也会立即触发?

时间:2017-04-06 15:59:49

标签: android alarmmanager

我正在从我的主要活动的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和以下警报设置时警报立即关闭。我不明白我做错了什么?

1 个答案:

答案 0 :(得分:3)

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中的第二个参数不是从现在开始的毫秒数,而是实际时间值。