2012-06-08 3 views
2

사용자가 지정한 시간에 매일 실행되도록 서비스를 예약하려고합니다. 나는 timepicker를 사용하여 서비스가 실행되는 시간대를 사용자가 제어 할 수 있도록합니다.MonoDroid - 알람 관리자를 사용하는 일일 예약 서비스?

사용자가 서비스 실행 시간을 변경할 때마다 알람 관리자를 업데이트하고 있습니다. 코드 내 테스트에서 혼합 된 결과를 가지고있는 것처럼 서비스가 제대로 실행되도록 예약하면 내가 100 % 확신

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

:

다음은이 작업을 수행하려면 코드입니다.

문제는 내가 지금 위의 코드로 실행되도록 서비스를 다시 스케줄 할 때마다 서비스가 즉시 시작된다는 것입니다 ... 나는 구성된 시간까지 서비스를 시작하고 싶지 않습니다. 일.

알람 관리자로 서비스를 예약 할 때 서비스를 즉시 실행하지 않고 지정된 시간에 서비스가 실행되도록 예약하고 업데이트하려면 어떻게합니까?

답변

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); 
} 
관련 문제