问题:我的闹钟管理器立即触发。
我已经看过堆栈溢出的其他例子,人们面临同样的问题,但我似乎无法弄清楚为什么我的问题也一样。我在timeToFire参数中输入了较高的值,但仍然会立即触发。
public void StartAlarm(string title, string message,int id, DateTime timeToBroadcast)
{
var localIntent = new Intent(_context, typeof (NotificationManager));
localIntent.PutExtra("title", title);
localIntent.PutExtra("message", shortMessage);
localIntent.PutExtra("Id", id);
_mAlarmSender = PendingIntent.GetBroadcast(_context, id, localIntent, 0);
var am = (AlarmManager) _context.GetSystemService(Context.AlarmService);
long timeToFire = SystemClock.CurrentThreadTimeMillis() + 100*1000;
am.Set(AlarmType.RtcWakeup, timeToFire, _mAlarmSender);
}
这些是我在审核中寻找答案的其他问题
AlarmManager Interval for Android
why does my alarm go off straight away? (android)
set the time in Alarm manager Android - alarm fired instantly
答案 0 :(得分:4)
根据Android文档,AlarmType.RtcWakeup
[1]要求时间相对于UTC。我相信SystemClock.CurrentThreadTimeMillis()
[2]是自启动以来经过的毫秒数。我想这就是导致triggerAtMillis
值被过去处理的原因,并立即触发警报,因为这个值非常低。
您真正想要的是使用标准System.currentTimeMillis()
[3]方法。这将为您提供相对于UTC的当前时间,这是AlarmManager
所期望的。
BTW:这个版本的C#是Java.Lang.JavaSystem.CurrentTimeMillis()
[1] http://developer.android.com/reference/android/app/AlarmManager.html#RTC_WAKEUP
public static final int RTC_WAKEUP
System.currentTimeMillis()中的警报时间(墙 以UTC为单位的时钟时间,它将在设备熄灭时唤醒设备。
常数值:0(0x00000000)
[2] http://developer.android.com/reference/android/os/SystemClock.html#currentThreadTimeMillis()
public static long currentThreadTimeMillis()
返回当前线程中运行的毫秒数。
返回线程中经过的毫秒数
[3] http://developer.android.com/reference/java/lang/System.html#currentTimeMillis()
public static long currentTimeMillis()
返回自此以来的当前时间(以毫秒为单位) 1970年1月1日00:00:00.0 UTC。
无论系统的时间如何,此方法始终返回UTC时间 区。这通常称为" Unix时间"或"纪元时间"。用一个 DateFormat实例,用于格式化此时间以显示给人。
此方法不应用于测量超时或其他已用时间 时间测量,因为改变系统时间会影响结果。 使用nanoTime()。
希望这有帮助。