繁体   English   中英

MonoDroid-使用警报管理器的每日计划服务?

[英]MonoDroid - Daily scheduled service using alarm manager?

我正在尝试安排服务在用户指定的时间每天运行。 我使用时间选择器来让用户控制服务的运行时间。

每次用户更改服务运行时间时,我都会更新警报管理器。

这是我执行此操作的代码:

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

我不确定代码是否正在安排服务正常运行,因为我的测试结果参差不齐。

我现在遇到的问题是,每次我重新安排服务以上述代码运行时,该服务都会立即启动....我不想在一天中配置的时间之前启动该服务。

我如何计划和更新服务以在一天中的指定时间运行,而又没有在与警报管理器进行计划后立即运行该服务?

如果您设置闹钟的时间已经过去,那么闹钟将立即响起。 因此,请先检查时间是否过去了,然后将其设置为第二天。

喜欢::

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM