Xamarin Android Alarm Manager问题

时间:2016-12-09 15:48:18

标签: c# android xamarin xamarin.android alarmmanager

我的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)

输出窗口:

  

14:14:20.217 5393-5393 / AlarmReceiver:在600000之后开始,跳跃   毫秒。 14:14:25.218 5393-5393 / AlarmReceiver:触发

1 个答案:

答案 0 :(得分:4)

您只需使用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;