仅在Xamarin.Android中使用TimePicker设置AlarmManager,立即启动报警

时间:2017-08-01 17:19:08

标签: android xamarin alarmmanager alarm timepicker

我在尝试使用时间选择器设置精确警报时遇到了问题。 我用这样的Handler设置了一个TimePicker:

TimePicker

TPBtn.Click += delegate
            {
                TimePickerDialog dialog = new TimePickerDialog(this, TimeSelectedListener, DateTime.Now.Hour, DateTime.Now.Minute, true);
                dialog.Show();
            };

private void TimeSelectedListener(object sender, TimePickerDialog.TimeSetEventArgs e)
        {
            hour = e.HourOfDay;
            minute = e.Minute;

            DateTime dtNow = DateTime.Now;
            int DayOfMonth = dtNow.Day;
            int Month = dtNow.Month;
            int Year = dtNow.Year;

            Calendar cl = Calendar.Instance;
            cl.Set(Year, Month, DayOfMonth, hour, minute, 0);

            AlarmManager am = (AlarmManager)this.GetSystemService(AlarmService);
            Intent intent = new Intent(this, typeof(OneShotAlarm));
            intent.AddFlags(ActivityFlags.NewTask);
            var source = PendingIntent.GetBroadcast(this, 0, intent, 0);

            am.SetExact(AlarmType.RtcWakeup, cl.TimeInMillis, source);

            Toast.MakeText(this, "Set Today: " + cl.TimeInMillis, ToastLength.Short).Show();
        }

不幸的是,这样做时会立即播放闹钟。 我也试过使用am.SetAlarmClock,但我不知道如何使用RTC时间,你能帮帮我吗?

我已经读过许多帖子,例如I am trying to set alarm on specific time using alarm manager but alarm intiated instantly?Set AlarmManager from DatePicker and TimePicker

非常感谢。

1 个答案:

答案 0 :(得分:0)

am.SetExact(AlarmType.RtcWakeup, cl.TimeInMillis, source);

cl.TimeInMillis上调用

Calendar.Instance,但没有以任何方式操纵。这意味着它被设置为“现在”,因此警报立即触发。

目前还不清楚您希望闹钟触发的时间,但您需要提供正确的TimeInMillis来执行此操作。