AlarmManager立即触发警报

时间:2013-05-21 03:25:24

标签: java android alarmmanager android-pendingintent

Intent myIntent = new Intent(Alarm.this, Automaton.class);
                  myIntent.putExtra("methodName", "myMethod");
                  myIntent.putExtra("hour", tp.getCurrentHour().toString());
                  myIntent.putExtra("minute", tp.getCurrentMinute().toString());
                  hour = tp.getCurrentHour();
                  minute = tp.getCurrentMinute();
                  PendingIntent pendingIntent = PendingIntent.getActivity(Alarm.this, 0, myIntent,PendingIntent.FLAG_UPDATE_CURRENT);
                  AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
                       Calendar calendar = Calendar.getInstance();
                       calendar.set(calendar.HOUR_OF_DAY, hour);
                       calendar.set(calendar.MINUTE, minute);
                       calendar.set(calendar.SECOND, 0); 
                       alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 86400000, pendingIntent);

以上是我的代码。这是我的问题;我在另一个Activity中有一个方法,我希望在指定的时间运行。如果用户选择当天尚未通过的时间(例如,您在上午10点将警报设置为上午11点,它将正常工作)。但是,如果您在上午10点将警报设置为9AM,它将立即触发Pending Intent。不知道我哪里错了。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

您可能需要检查set time是否小于current time。如果设定时间小于当前时间,请勿为其设置警报。因为即使你已经过了时间就保持它也没用。

答案 1 :(得分:2)

您可以使用日历实例并将日期设置为第二天,并将其与警报一起使用。

答案 2 :(得分:0)

对于@shreyas说的话,如果你需要碰一天,你需要自己检查一下。

示例..如果他们选择下午5:00(HOUR_OF_DAY = 17)将其与当前时间进行比较。如果该时间(17)小于当前时间,则向您的日历实例添加一天。

int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
calendar.set(calendar.DAY_OF_WEEK, dayOfWeek + 1);