Xamarin Android 警报管理器问题

Xamarin Android Alarm Manager Issue

我的 Xamarin Android 应用程序中有一个 AlarmManager。我正在使用 SetExact() 配置它,时间为 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)

输出window:

14:14:20.217 5393-5393/AlarmReceiver: Started, tigger after 600000 miliseconds. 14:14:25.218 5393-5393/AlarmReceiver: Triggered

您设置的是过去触发闹钟的时间,只使用10分钟的时间跨度,需要从1970年开始计算毫秒数。

If the stated trigger time is in the past, the alarm will be triggered immediately.

获取当前时间,并添加时间。

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;