如果闹钟时间已经过去,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 { }
如果setTimestamp
在currentTimestamp
之前,我应该如何使用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*()
方法。