当前位置: 首页 > 知识库问答 >
问题:

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

农英杰
2023-03-14

我遇到了麻烦,而试图设置一个准确的警报,只有时间选择器。我设置了一个带有如下处理程序的时间选择器:

计时器

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时间,你能帮我吗?

我已经读了很多线程,就像我正在尝试设置警报在特定的时间使用警报管理器,但警报立即启动?并从DatePicker和TimePicker中设置AlarmManager

多谢.

共有1个答案

姜嘉赐
2023-03-14

am.setexact(alarmtype.rtcwakeup,cl.timeinmilis,source);

cl.timeinmilis是对calendar.instance调用的,而该Calendar.instance尚未进行任何操作。所以这意味着它被设置为“现在”,因此警报立即发射。

现在还不清楚您希望闹钟在什么时候发出,但您需要提供正确的timeinmillis来执行此操作。

 类似资料:
  • 我每天上午11点使用显示通知。 当我在应用程序中设置警报时,警报会在短时间后触发。

  • 我试过很多次了,但什么也没有。 这是类的代码,它应该设置警报,但在指定的时间和日期没有发生任何事情。

  • 我想取消所有设置的警报。。。。。我已经搜索了很多,尝试了很多东西,但都没有成功。。。当我将闹钟设置为2分钟后,然后取消它时,2分钟后它仍会启动。。。。。任何帮助都将不胜感激。 创建警报的方法: 这是为了取消报警:

  • 如果我设置我的闹钟3秒后,接收器被呼叫,我得到我的通知。

  • 我有一个应用程序,在指定的时间设置警报与TimePicker(24小时模式)。 我注意到,如果时间是23:00,而您将报警设置为01:00,AlarmManager会将其解释为已过日期。目前,我设置的警报如下所示: 正如你所看到的,该应用程序计算时差,如果时差为负值,则设置第二天的警报。这就产生了上面描述的bug。如何修复它? 当做 马库斯