【问题标题】:Alarm not accessing BroadcastReceiver警报未访问 BroadcastReceiver
【发布时间】:2018-12-30 03:16:11
【问题描述】:

我有一个时间选择器来设置闹钟

public class TimePickerFragment : DialogFragment, TimePickerDialog.IOnTimeSetListener
{
    public static readonly string TAG = "MyTimePickerFragment";
    Action<DateTime> timeSelectedHandler = delegate { };

    public static TimePickerFragment NewInstance(Action<DateTime> onTimeSelected)
    {
        TimePickerFragment frag = new TimePickerFragment();
        frag.timeSelectedHandler = onTimeSelected;
        return frag;
    }

    public override Dialog OnCreateDialog(Bundle savedInstanceState)
    {
        DateTime currentTime = DateTime.Now;
        //bool is24HourFormat = DateFormat.Is24HourFormat(Activity);
        TimePickerDialog dialog = new TimePickerDialog
            (Activity, this, currentTime.Hour, currentTime.Minute, false);
        return dialog;
    }



    public void OnTimeSet(TimePicker view, int hourOfDay, int minute)
    {
        DateTime currentTime = DateTime.Now;
        DateTime selectedTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, hourOfDay, minute, 0);
        Log.Debug(TAG, selectedTime.Ticks.ToString());

        timeSelectedHandler(selectedTime);
    }
}

还有这个功能来设置闹钟

 private void setAlarm(DateTime time)
        {
            Intent intent = new Intent(this, typeof(MyReceiver));
            PendingIntent pendingIntent = PendingIntent.GetBroadcast(this, RQS_1, intent, 0);
            AlarmManager alarmManager = (AlarmManager)GetSystemService(Context.AlarmService);
            alarmManager.Set(AlarmType.RtcWakeup, time.Ticks, pendingIntent);
            string timeSet = time.Ticks.ToString();
            Toast.MakeText(this, timeSet, ToastLength.Short).Show();

        }

即使闹钟设置等于当前时间,也不会调用广播接收器。我尝试检查时间时间设置和当前时间的值,即使当前时间到达设置时间,广播接收器也不会生效

广播接收器

[BroadcastReceiver]
    public class MyReceiver : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            Toast.MakeText(context, "Time reached!", ToastLength.Short).Show();
        }
    }
}

我是缺少权限还是其他什么?

更新:感谢 sushihangover 回答

public class TimePickerFragment : DialogFragment, TimePickerDialog.IOnTimeSetListener
    {
        public static readonly string TAG = "MyTimePickerFragment";
        Action<Calendar> timeSelectedHandler = delegate { };

        public static TimePickerFragment NewInstance(Action<Calendar> onTimeSelected)
        {
            TimePickerFragment frag = new TimePickerFragment();
            frag.timeSelectedHandler = onTimeSelected;
            return frag;
        }

        public override Dialog OnCreateDialog(Bundle savedInstanceState)
        {
            DateTime currentTime = DateTime.Now;
            //bool is24HourFormat = DateFormat.Is24HourFormat(Activity);
            TimePickerDialog dialog = new TimePickerDialog
                (Activity, this, currentTime.Hour, currentTime.Minute, false);
            return dialog;
        }

        public void OnTimeSet(TimePicker view, int hourOfDay, int minute)
        {
            Calendar calNow = Calendar.Instance;
            Calendar calSet = (Calendar)calNow.Clone();
            calSet.Set(CalendarField.HourOfDay, hourOfDay);
            calSet.Set(CalendarField.Minute, minute);

            calSet.Set(CalendarField.Millisecond, 0);

            DateTime currentTime = DateTime.Now;
            DateTime selectedTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, hourOfDay, minute, 0);
            Log.Debug(TAG, selectedTime.Ticks.ToString());

            timeSelectedHandler(calSet);
        }
    }

【问题讨论】:

  • @SushiHangover 你能把这个作为答案发布,这样我就可以把它标记为答案!谢谢!现在可以使用了
  • 很高兴它有帮助,我添加了答案????

标签: c# android xamarin broadcastreceiver alarmmanager


【解决方案1】:

您正在使用 .Net 的 DateTime 中的 ticks,而 Android 的 AlarmManager 基于 Android/Linux Epoch 毫秒

查看我对这些其他 SO 的回答,了解如何使用 Android 系统时间或 Android 日历:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多