在Xamarin.Android中只使用TimePicker设置AlarmManager,闹钟立即开始。

5 浏览
0 Comments

在Xamarin.Android中只使用TimePicker设置AlarmManager,闹钟立即开始。

这个问题已经有了答案

Xamarin Android Alarm Manager Issue

我在尝试只使用时间选择器设置一个精确闹钟时遇到了麻烦。

我使用了一个处理程序来设置时间选择器,如下所示:

时间选择器

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

我已经阅读了许多类似的主题,比如我正在尝试使用闹钟管理器在特定时间设置闹钟,但闹钟会立即启动?从日期选择器和时间选择器设置 AlarmManager

非常感谢。

admin 更改状态以发布 2023年5月21日
0
0 Comments

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

cl.TimeInMillis 被调用在 Calendar.Instance 上,它没有被任何方式改变过。这意味着它被设置为“现在”,因此闹钟会立即触发。

目前不清楚你希望闹钟何时触发,但你需要提供正确的 TimeInMillis 才能实现。

0