public override Result DoWork() { List <Schedule> schedules = GetSchedules().Result; AlarmManager alarmManager = MainActivity.Instance.GetSystemService(Context.AlarmService) as AlarmManager; List <PendingIntent> intentArray = new List <PendingIntent>(); int alarmCounter = 1; schedules.ForEach(schedule => { Bundle notificationDataBundle = new Bundle(); notificationDataBundle.PutString("Title", "Medication Reminder"); notificationDataBundle.PutString("Message", $"Please take {schedule.MedicineName} immediately."); Intent notificationIntent = new Intent(MainActivity.Instance, typeof(MedicationAlertReceiver)); notificationIntent.PutExtra("NotificationData", notificationDataBundle); string[] medicationTimes = schedule.MedicationTime.Split(";"); foreach (string medicationTime in medicationTimes) { if (string.IsNullOrWhiteSpace(medicationTime)) { continue; } int alarmRequestCode = schedule.ID * 10 + alarmCounter; PendingIntent alarmIntent = PendingIntent.GetBroadcast( MainActivity.Instance, alarmCounter, notificationIntent, PendingIntentFlags.Immutable ); TimeSpan myTimeSpan = TimeSpan.Parse(medicationTime); DateTime scheduleTime = DateTime.Today + myTimeSpan; long alarmTimeEpoch = new DateTimeOffset(scheduleTime).ToUnixTimeMilliseconds(); long currentTimeEpoch = new DateTimeOffset(DateTime.Now).ToUnixTimeMilliseconds(); if (alarmTimeEpoch > currentTimeEpoch) { alarmManager.SetAlarmClock( new AlarmManager.AlarmClockInfo( alarmTimeEpoch, alarmIntent ), alarmIntent ); intentArray.Add(alarmIntent); } ++alarmCounter; } }); return(Result.InvokeSuccess()); }
public override Result DoWork() { var logger = new OurLoggerService(); var workNo = InputData.GetInt("WORK_NO", 0); logger.LogInformation($"Work NO: {workNo} Started"); AlarmManager alarmManager = MainActivity.Instance.GetSystemService(Context.AlarmService) as AlarmManager; List <PendingIntent> intentArray = new List <PendingIntent>(); Bundle notificationDataBundle = new Bundle(); notificationDataBundle.PutString("Title", "Serilog File Notification"); notificationDataBundle.PutString("Message", $"Showing serilog file notification for task {workNo}"); notificationDataBundle.PutInt("WORK_NO", workNo); Intent notificationIntent = new Intent(MainActivity.Instance, typeof(NotificationAlertReceiver)); notificationIntent.PutExtra("NotificationData", notificationDataBundle); var random = new Random(); var randomSeconds = random.Next(20, 60); int alarmRequestCode = workNo * 10 + workNo; PendingIntent alarmIntent = PendingIntent.GetBroadcast( MainActivity.Instance, alarmRequestCode, notificationIntent, PendingIntentFlags.Immutable ); TimeSpan myTimeSpan = new TimeSpan(0, 0, randomSeconds); DateTime scheduleTime = DateTime.Now + myTimeSpan; logger.LogInformation($"Setting Alarm for {workNo} at {scheduleTime}"); long alarmTimeEpoch = new DateTimeOffset(scheduleTime).ToUnixTimeMilliseconds(); long currentTimeEpoch = new DateTimeOffset(DateTime.Now).ToUnixTimeMilliseconds(); if (alarmTimeEpoch > currentTimeEpoch) { alarmManager.SetAlarmClock( new AlarmManager.AlarmClockInfo( alarmTimeEpoch, alarmIntent ), alarmIntent ); intentArray.Add(alarmIntent); } logger.LogInformation($"Work NO: {workNo} set up complete"); return(Result.InvokeSuccess()); }
public void SetAlarm(PendingIntent pintent) { IsSetAlarm = true; this.pintent = pintent; manager = (AlarmManager)Application.Context.GetSystemService(Context.AlarmService); Calendar calendar = Calendar.Instance; calendar.Set(CalendarField.HourOfDay, time.Hours); calendar.Set(CalendarField.Minute, time.Minutes); manager.SetAlarmClock(new AlarmManager.AlarmClockInfo(calendar.Time.Time, pintent), pintent); //manager.Set(AlarmType.RtcWakeup, calendar.TimeInMillis, pintent); }
/// <summary> /// Schedules an alarm. /// </summary> /// <param name="alarm">The alarm to be scheduled.</param> public void ScheduleAlarm(Alarm alarm) { var intent = new Intent(context, typeof(AlarmIntentService)); // intent.PutExtra (AlarmIntentService.ALARM_KEY, alarm); // TODO - workaround https://github.com/googlesamples/android-DirectBoot/issues/4 intent.PutExtra("id", alarm.Id); intent.PutExtra("year", alarm.Year); intent.PutExtra("month", alarm.Month); intent.PutExtra("day", alarm.Day); intent.PutExtra("hour", alarm.Hour); intent.PutExtra("minute", alarm.Minute); var pendingIntent = PendingIntent.GetService(context, alarm.Id, intent, PendingIntentFlags.UpdateCurrent); var triggerOffset = new DateTimeOffset(alarm.GetTriggerTime()); var alarmClockInfo = new AlarmManager.AlarmClockInfo(triggerOffset.ToUnixTimeMilliseconds(), pendingIntent); alarmManager.SetAlarmClock(alarmClockInfo, pendingIntent); Log.Info(TAG, $"Alarm scheduled at {alarm.Hour}:{alarm.Minute} {alarm.Year}-{alarm.Month}-{alarm.Day}"); }
public static void ScheduleIntent(this AlarmManager manager, DateTime dateTime, PendingIntent intent) => manager.SetAlarmClock(new AlarmManager.AlarmClockInfo(dateTime.ToUnix(), intent), intent);