我的Xamarin Android应用程序中有一个AlarmManager
。我正在使用SetExact()
配置它,时间为5分钟。但仅仅过了5秒钟就开始了。不管我什么时候配置它,它总是在5秒后触发。
我在Java中使用了完全相同的代码,它运行得非常好。
代码:
[BroadcastReceiver]
public class AlarmReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
Log.Info("AlarmReceiver", "Triggered");
}
public static void Start(Context context, long triggerAfterMilis)
{
var type = AlarmType.RtcWakeup;
var alarmManager = (AlarmManager) context.GetSystemService(Context.AlarmService);
var timerIntent = PendingIntent.GetBroadcast(context, 0, new Intent(context, typeof(AlarmReceiver)), PendingIntentFlags.CancelCurrent);
alarmManager.Cancel(timerIntent);
if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
alarmManager.SetAndAllowWhileIdle(type, triggerAfterMilis, timerIntent);
else if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
alarmManager.SetExact(type, triggerAfterMilis, timerIntent);
else
alarmManager.Set(type, triggerAfterMilis, timerIntent);
Log.Info("AlarmReceiver", $"Started, tigger after {triggerAfterMilis} miliseconds.");
}
}
如何使用
AlarmReceiver
:AlarmReceiver.Start(Activity,(long)TimeSpan.FromMinutes(10).TotalMilliseconds)
输出窗口:
14:14:20.2175393-5393/报警接收器:启动,60万后跳汰机
毫秒。14:14:25.218 5393-5393/警报接收器:已触发
最佳答案
您只需使用10分钟的时间跨度来设置触发报警的时间,从1970年年初开始需要计算毫秒数。
如果指定的触发时间已过,则会立即触发警报。
获取当前时间,并为其添加时间。
var TenMinsFromNow = Calendar.GetInstance(Android.Icu.Util.TimeZone.Default).TimeInMillis + TimeSpan.FromMinutes(10).TotalMilliseconds);
“1970-01-01t00:00:00z”的当前时间(毫秒):
Java.Lang.JavaSystem.CurrentTimeMillis();
或:
Calendar.GetInstance(Android.Icu.Util.TimeZone.Default).TimeInMillis;