Xamarin Android Alarm Manager Issue



我的Xamarin Android应用程序中有一个AlarmManager。我正在使用 5 分钟的SetExact()时间来配置它。但它仅在五秒钟后启动。无论我配置它的时间,它总是会在 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.217 5393-5393/警报接收器:已启动,600000 之后的跳跳虎 毫秒。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;

最新更新