2

ユーザーが指定した時刻にサービスを毎日実行するようにスケジュールしようとしています。タイムピッカーを使用して、サービスが実行される時刻をユーザーが制御できるようにしています。

ユーザーがサービスを実行する時刻を変更するたびに、アラーム マネージャーを更新しています。

これを行うための私のコードは次のとおりです。

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% 確信が持てません。

私が現在経験している問題は、上記のコードでサービスを実行するように再スケジュールするたびに、サービスがすぐに開始されることです....構成された時刻までサービスを開始したくありません。

アラーム マネージャでサービスをスケジュールした直後にサービスを実行せずに、指定した時刻に実行するようにサービスをスケジュールおよび更新するにはどうすればよいですか?

4

1 に答える 1

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);
}
于 2012-06-08T02:17:20.360 に答える