2012-06-08 69 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); 
}