Android AlarmManager在错误的时间触发

时间:2011-12-09 21:07:12

标签: android alarmmanager

我正在设置警报,警报管理器将在下午6点运行。如果已经是下午6点,我希望它能在第二天下午6点运行。

AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        Calendar calendar = Calendar.getInstance();

        if(calendar.get(Calendar.HOUR_OF_DAY) < 18) {
            calendar.set(Calendar.HOUR, 18);
            calendar.set(Calendar.MINUTE, 0);
        } else {
            // Set sync time
            calendar.add(Calendar.DATE, 1);
            calendar.set(Calendar.HOUR, 18);
            calendar.set(Calendar.MINUTE, 0);
        }       

        Intent alarmIntent = new Intent(context, AlarmReceiver.class);  
        alarmIntent.putExtra("syncmode", "upload");

        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        manager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

我有6个Android平板电脑都运行相同的确切代码,有些在正确的时间醒来,有些则在几小时后运行。我检查了时区,一切都匹配。 AlarmManager的文档说使用UTC时间设置警报,但实际上我使用的是当地时间,正在工作的是正确的时间。其他人在时间前4小时开火。我做错了什么?

编辑:我无法回答我自己的问题,所以我设置了Calendar.HOUR而不是HOUR_OF_DAY,这导致时间设置不正确。

1 个答案:

答案 0 :(得分:2)

这样就会从“未答复”列表中删除:

  

我正在设置Calendar.HOUR而不是HOUR_OF_DAY   时间设置不正确。