Xamarin Android 闹钟管理器问题

4
我在我的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.217 5393-5393/AlarmReceiver:已启动,触发时间为600000毫秒。14:14:25.218 5393-5393/AlarmReceiver:已触发


1
请分享你的代码 - Raymond
@RaymonddelaCroix,给你。 - Alex
1个回答

3

您正在设置触发警报的时间,只使用了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;

是的,这就是问题所在。非常感谢! - Alex
@Alex 很高兴能帮到你...;-) - SushiHangover
2021年,无论你做什么,Xamarin的AlarmManager都不再工作了! - user1034912
@user1034912 Android的AlarmManager在Xamarin中仍然可以工作,您应该发布一个新问题,附上您的代码和遇到的问题。 - SushiHangover

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接