2012-06-08 3 views
2

Я пытаюсь запланировать обслуживание, которое будет выполняться ежедневно в указанное пользователем время. Я использую timepicker, чтобы дать пользователю возможность контролировать, какое время суток служба запускается.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); 
} 
Смежные вопросы