3

我正在为 android 使用 Xamarin,我想使用 RTC_WAKEUP 标志来设置警报。有谁知道如何以毫秒为单位计算触发时间?我可以使用 DateTime.ToUniversalTime,但是alarmmanager set 方法正在寻找很长的时间(毫秒)。

对于经过的时间,我可以使用 SystemClock.ElapsedRealtime()

但是 RTC_WAKEUP 的文档说要使用 System.currentTimeMillis()。我在 c# 中找不到等价物。有任何想法吗?

4

3 回答 3

2

在 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);
于 2015-01-20T16:09:53.873 回答
1

我找不到内置方法,但自 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);
于 2013-08-31T10:27:26.597 回答
0

使用 DateTimeOffset 类的ToUnixTimeMilliseconds()扩展。

long trigger = new DateTimeOffset(triggerDate).ToUnixTimeMilliseconds();
于 2017-06-23T15:45:13.130 回答