如果闹钟时间已经过去,android可以防止即时触发闹钟服务

报警pipe理器的参考说

如果所述的触发时间在过去,则会立即触发警报。

我在申请中遇到了这个问题。 这是我的报警pipe理员代码:

Intent myIntent = new Intent(getActivity(), DinnerAlarmReceiver.class); pendingDinnerIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); calendar.set(Calendar.MINUTE, minute); alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingDinnerIntent); 

有没有解决这个问题的方法?

– – -编辑 – – –

我已经写了一些代码来估计闹钟的设置时间是否在当前时间之前。 以上是具有相应变化的部分:

 Calendar calendar = Calendar.getInstance(); long currentTime = calendar.getTimeInMillis(); calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); calendar.set(Calendar.MINUTE, minute); long setTime = calendar.getTimeInMillis(); Timestamp setTimestamp = new Timestamp(setTime); Timestamp currentTimestamp = new Timestamp(currentTime); if (setTimestamp.after(currentTimestamp)) { alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingDinnerIntent); } else { } 

如果setTimestampcurrentTimestamp之前,我应该如何使用alarmManager

您不需要创buildTimestamp 。 您可以使用Calendar来做到这一点。

 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); calendar.set(Calendar.MINUTE, minute); if(calendar.before(Calendar.getInstance())) { calendar.add(Calendar.DATE, 1); } alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingDinnerIntent); 

我还会提到,从KitKat开始,如果你的targetSdkVersion是19或者更高,那么AlarmManager#set()方法就不准确了。 如果您希望闹钟在准确时间触发,则需要使用setExact*()方法。