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());
        }
예제 #2
0
        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());
        }
예제 #3
0
파일: Clocks.cs 프로젝트: MiXaiL1997/Alarm
        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);
        }
예제 #4
0
        /// <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}");
        }
예제 #5
0
 public static void ScheduleIntent(this AlarmManager manager, DateTime dateTime, PendingIntent intent) =>
 manager.SetAlarmClock(new AlarmManager.AlarmClockInfo(dateTime.ToUnix(), intent), intent);