警报管理器仅在第一次工作,然后立即触发

时间:2014-09-13 20:37:27

标签: android alarmmanager

我正在尝试在android中创建一个警报方法,它接收一个特定的日期/时间,并且必须在该特定时间执行某些操作。

现在它第一次正常工作,即使未来指定的时间也会立即触发。

这是我的代码:

public void CreateAlarmUTC(ScheduleRequest mrequest)
{
    AlarmManager alarmMgr;
    PendingIntent alarmIntent;
    Context context;

    int index = mrequest.Index;
    context = getApplicationContext();


    ScheduledDate date = SchMs.get(mrequest.Index).ScheduledDate;
    String dat = date.calendar.getTime().toGMTString();

    int uniqueTime = date.Minutes+date.Day*10+date.Year*100+date.Hour*1000+date.Month*10000;

    alarmMgr = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(ALARM_SERVICE);
    intent.putExtra("index", index);

    alarmIntent = PendingIntent.getBroadcast(context, uniqueTime, intent, 0);


    alarmMgr.set(AlarmManager.RTC_WAKEUP, date.calendar.getTimeInMillis(), alarmIntent); 
}

ScheduleRequest是我创建的一个类,它有一个索引引用一个名为SchMs的数组中对象的位置。

ScheduledDate是我创建的一个类,它有一个名为calendar的Calendar对象。

以下是我在ScheduledDate中创建日历的方法:

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MINUTE, time_timePicker.getCurrentMinute());
    cal.set(Calendar.HOUR_OF_DAY, time_timePicker.getCurrentHour());
    cal.set(Calendar.DAY_OF_MONTH, time_datePicker.getDayOfMonth());
    cal.set(Calendar.MONTH, time_datePicker.getMonth());
    cal.set(Calendar.YEAR, time_datePicker.getYear());

time_timePicker是我活动中的TimePicker。

time_datePicker是我活动中的DatePicker。

有什么想法吗? 您是否有更好的方法在特定时间执行特定任务一次?

谢谢

1 个答案:

答案 0 :(得分:0)

最后经过调试后,我发现eclipse由于某种原因在第一次增加了一天比我想要的更多。例如,如果我选择14/09/2014(DD / MM / YYYY)假设我想要15/09/2014,那么我必须让我 ScheduledDate.calendar as Today-1:

    cal.set(Calendar.DAY_OF_MONTH, time_datePicker.getDayOfMonth()-1);

在恢复日食和更多调试之后,我发现它恢复正常,我应该保留它,因为它原来是:

    cal.set(Calendar.DAY_OF_MONTH, time_datePicker.getDayOfMonth());

所以现在它运作得很好。

**上面的例子现在可以正常使用。