我想,这样它发送每当警报被触发的通知设置报警。下面的代码,我有,在alarmDate.Millisecond
返回0(因为它从来没有设置)。它应该返回正确米利斯用于报警的工作 - 我认为这需要在毫秒UTC - 但时间必须是GMT / DST在英国。
码:
private void InitBroadcast()
{
// Build the intents
var intent = new Intent(this, typeof(MyReceiver));
var pendingIntent = PendingIntent.GetBroadcast(this, 0, intent, 0);
var alarmManager = (AlarmManager)GetSystemService(AlarmService);
// Build the dates
var currentDate = DateTime.Now;
var alarmDate = new DateTime(currentDate.Year, currentDate.Month, currentDate.Day, 5, 29, 0, DateTimeKind.Local);
// If the alarm time has already past, set the alarm date to tomorrow
if (DateTime.Compare(currentDate, alarmDate) < 0) {
alarmDate.AddDays(1);
}
alarmManager.SetRepeating(AlarmType.RtcWakeup, alarmDate.Millisecond, millisInADay, pendingIntent);
textView.SetText(string.Format("Alarm set for {0}", alarmDate.ToString()), TextView.BufferType.Normal);
}
毫秒部件,表示为0到999之间的值。
所以,因为它从来没有alarmDate.Millisecond
不返回0,则返回0,因为它被设置为零,那么你alarmDate = new DateTime(currentDate.Year, currentDate.Month, currentDate.Day, 5, 29, 0, DateTimeKind.Local);
创建的DateTime对象
您正在设置时间为当前日期在上午5点29分(与0秒,所以0毫秒暗示)。
alarmDate.Ticks
会给你,因为二十一世纪初已经过去的“滴答”(一毫秒的1 / 10,000)的红棕色。但千万记住什么SushiHangover在他的评论中这样说链接
Android的AlarmManager是基于安卓/ Linux的毫秒为单位
不是.NET日期时间刻度。毫秒为单位的自1970年1月1日,在00:00:00 GMT(1970-01-01 00:00:00 GMT)以来经过的毫秒数。
因此,而不是在alarmDate.Millisecond
传递给alarmManager.SetRepeating
方法,使用当前时间和1970年1月1日午夜GMT之间的时间跨度,以获得毫秒为单位,并把它传递代替,例如:
var epochMs = (alarmDate - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
alarmManager.SetRepeating(AlarmType.RtcWakeup, (Int64)epochMs, millisInADay, pendingIntent);