Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AlarmManager在5秒钟后几乎立即启动_C#_Android_Xamarin.android - Fatal编程技术网

C# AlarmManager在5秒钟后几乎立即启动

C# AlarmManager在5秒钟后几乎立即启动,c#,android,xamarin.android,C#,Android,Xamarin.android,我使用Xamarin Android在10秒后使用alarm manager发出通知,但无论何时设置通知,都会在5秒后触发。我试过阅读其他帖子,从中我了解到我必须从1970年后设置毫秒,但没有成功 尝试1 Intent alarmIntent = new Intent(Application.Context, typeof(AlarmReceiver)); alarmIntent.PutExtra("message", "This is my test message!");

我使用Xamarin Android在10秒后使用alarm manager发出通知,但无论何时设置通知,都会在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中,获取自epoch(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);
最后,要以毫秒为单位检索时间,请将timespan的TotalMillicles属性强制转换为long

long milliSinceEpoch = (long) tsEpoch.TotalMilliseconds;

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

这也有很大的帮助

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);

这对c#等价物非常有用,我想我仍然想知道如何设置特定时间和日期的提醒