1

如何在最近的时间上启动 AlarmManager?例如,当用户单击按钮并且时间是 12:32 时,我想在 13:00 开始服务,然后每小时重复一次,我尝试了此代码,但它不起作用,它仅在一个小时后启动 AlarmManager,因此,如果时间是 12:32,它将在 13:32 开始服务。

Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY)+1);

        AlarmManager alarm = (AlarmManager)myService.this.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(myService.this, AlarmReceiver.class);
        PendingIntent pIntent = PendingIntent.getBroadcast(BatteryService.this, 0, i, 0);
        alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000*60*60, pIntent);
4

3 回答 3

5

当您创建日历实例时,它的时间就是当前时间。在你的例子中是 12:32。然后你在一天中增加一小时。现在是 13:32。您需要将分钟(和秒)设置为 0:

cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);  // well ...
于 2012-04-23T08:30:07.210 回答
0

尝试根据分钟四舍五入...当然这需要获取当前时间。

于 2012-04-23T07:31:58.020 回答
0

你可以 int hour = calendar.get(Calendar.HOUR_OF_DAY); 用来启动你的警报然后使用

AlarmManager.INTERVAL_HOUR 

重复你的警报,但请注意,警报现在将开始,然后每小时重复一次

于 2017-03-22T13:09:36.947 回答