我使用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);

最佳答案

获取自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 milliSinceEpoch = (long) tsEpoch.TotalMilliseconds;


这样,您只需在该值上加上10000,就可以得到想要的结果。

10-08 03:28