我使用Xamarin Android在10秒后使用警报管理器发出通知,但无论我设置通知的时间是在5秒后触发。我已经尝试阅读其他帖子,据我所知,我必须在1970年之后设置毫秒,但没有工作
尝试1
Intent alarmIntent = new Intent(Application.Context, typeof(AlarmReceiver));
alarmIntent.PutExtra("message", "This is my test message!");
alarmIntent.PutExtra("title", "This is my test title!");
PendingIntent pendingIntent = PendingIntent.GetBroadcast(Application.Context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
AlarmManager alarmManager = (AlarmManager)Application.Context.GetSystemService(Context.AlarmService);
//alarmManager.Set(AlarmType.Rtc, SystemClock.ElapsedRealtime() + 30 * 1000, pendingIntent);
Java.Util.Calendar calendar = Java.Util.Calendar.Instance;
calendar.Set(CalendarField.HourOfDay, 21);
calendar.Set(CalendarField.Minute, 41);
alarmManager.Set(AlarmType.RtcWakeup, Calendar.GetInstance(Java.Util.TimeZone.Default).TimeInMillis+10000, pendingIntent);
尝试2
DateTime dtBasis = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); // Android times are quoted as milliseconds since start of 1970
alarmManager.Set(AlarmType.RtcWakeup, (long)DateTime.Now.AddMinutes(1).ToUniversalTime().Subtract(dtBasis).TotalMilliseconds, pendingIntent);
答案 0 :(得分:1)
在Android中获取自纪元(01/01/1970)以来的毫秒数的标准方法是使用System.currentTimeMillis()方法。因此,您可能希望尝试将alarmManager.set()的第二个参数设置为System.currentTimeMillis()+ 10000。
C#等价物是创建一个表示纪元的DateTime对象
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
然后从DateTime.UtcNow对象中减去它以从中获取TimeSpan对象
TimeSpan tsEpoch = DateTime.UtcNow.Subtract(epoch);
最后,要以毫秒为单位检索时间,请将时间跨度的TotalMilliseconds属性强制转换为long。
long milliSinceEpoch = (long) tsEpoch.TotalMilliseconds;
使用它,您只需将10000添加到该值,这应该可以为您提供所需的结果。
答案 1 :(得分:1)
这也有很好的帮助
Java.Util.Calendar calendar = Java.Util.Calendar.Instance;
calendar.Set(CalendarField.HourOfDay, 20);
calendar.Set(CalendarField.Minute, 57);
alarmManager.Set(AlarmType.RtcWakeup, calendar.TimeInMillis,pendingIntent);