我正在尝试安排服务在用户指定的时间每天运行。我正在使用时间戳来让用户控制服务运行的时间。
每次用户更改服务运行的时间我都会更新警报管理器。
这是我的代码:
void RescheduleOpeningRatesRetriever (string strTime)
{
var i = new Intent (this.ApplicationContext, typeof (OpenRatesService));
var src = PendingIntent.GetService (this.ApplicationContext, 0, i, PendingIntentFlags.UpdateCurrent);
var am = (AlarmManager)this.ApplicationContext.GetSystemService (Context.AlarmService);
var hour = TimePickerPreference.GetHour (strTime);
var minute = TimePickerPreference.GetMinute (strTime);
var cal = Java.Util.Calendar.GetInstance (Java.Util.TimeZone.Default);
cal.Set (Java.Util.CalendarField.HourOfDay, hour);
cal.Set (Java.Util.CalendarField.Minute, minute);
am.SetRepeating (AlarmType.RtcWakeup, cal.TimeInMillis, AlarmManager.IntervalDay, src);
}
我不能100%确定代码是否正在安排服务正常运行,因为我的测试结果不一。
我现在遇到的问题是每次我重新安排服务以使用上面的代码运行时,服务立即启动....我不想在配置的时间之前启动服务
我如何安排和更新服务,以便在一天的指定时间运行,而无需在使用警报管理器安排服务后立即运行服务?
答案 0 :(得分:1)
如果您设置闹钟的时间过去,则闹钟会立即熄灭。所以首先检查时间是否已经过去,如果是,那么将其设置为第二天。
喜欢::
Calendar rightNow = Calendar.getInstance()
if( cal.after( rightNow ) )
{
am.SetRepeating (AlarmType.RtcWakeup, cal.TimeInMillis, AlarmManager.IntervalDay, src);
}
else
{
cal.roll(Java.Util.CalendarField.DAY_OF_MONTH, 1);
SetRepeating (AlarmType.RtcWakeup, cal.TimeInMillis, AlarmManager.IntervalDay, src);
}