我正在为 android 使用 Xamarin,我想使用 RTC_WAKEUP 标志来设置警报。有谁知道如何以毫秒为单位计算触发时间?我可以使用 DateTime.ToUniversalTime,但是alarmmanager set 方法正在寻找很长的时间(毫秒)。
对于经过的时间,我可以使用 SystemClock.ElapsedRealtime()
但是 RTC_WAKEUP 的文档说要使用 System.currentTimeMillis()。我在 c# 中找不到等价物。有任何想法吗?
我正在为 android 使用 Xamarin,我想使用 RTC_WAKEUP 标志来设置警报。有谁知道如何以毫秒为单位计算触发时间?我可以使用 DateTime.ToUniversalTime,但是alarmmanager set 方法正在寻找很长的时间(毫秒)。
对于经过的时间,我可以使用 SystemClock.ElapsedRealtime()
但是 RTC_WAKEUP 的文档说要使用 System.currentTimeMillis()。我在 c# 中找不到等价物。有任何想法吗?
在 Xamarin Android 中,您可以使用Java.Lang.JavaSystem.CurrentTimeMillis();
示例如何在 18:30 设置唤醒警报:
Java.Util.Calendar calendar = Java.Util.Calendar.Instance;
calendar.Set(CalendarField.HourOfDay, 18);
calendar.Set(CalendarField.Minute, 30);
alarmManager.SetRepeating(AlarmType.RtcWakeup, calendar.TimeInMillis, AlarmManager.IntervalDay, pendingAlarmIntent);
我找不到内置方法,但自 1970 年以来的毫秒数很容易计算。以下对我有用,并在正确的时间唤醒机器:
DateTime dtBasis = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); // Android times are quoted as milliseconds since start of 1970
alarm_manager.Set(AlarmType.RtcWakeup, (long)wake_up_at.ToUniversalTime().Subtract(dtBasis).TotalMilliseconds, my_intent);
使用 DateTimeOffset 类的ToUnixTimeMilliseconds()扩展。
long trigger = new DateTimeOffset(triggerDate).ToUnixTimeMilliseconds();