2012-06-08 66 views
2

我正试图安排一项服务在用户指定的时间每天运行。我正在使用一个时间选择器来让用户控制该服务的运行时间。MonoDroid - 使用报警管理器的每日定时服务?

每当用户更改服务运行的时间,我正在更新警报管理器。

这里是我的代码来做到这一点:

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%肯定,如果代码被调度,因为我已经从我的测试结果好坏参半的服务才能正常运行。

我现在遇到的问题是每次我重新安排服务以上述代码运行,服务即刻启动....我不想启动服务,直到配置的时间天。

如何安排和更新服务,使其在一天中的指定时间运行,而无需使用警报管理器进行安排即时运行服务?

回答

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); 
}