【问题标题】:Xamarin Android Alarm Manager IssueXamarin Android 警报管理器问题
【发布时间】:2017-04-25 03:35:59
【问题描述】:

我的 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:已触发

【问题讨论】:

  • 请分享您的代码
  • @RaymonddelaCroix 你去吧

标签: c# android xamarin xamarin.android alarmmanager


【解决方案1】:

你是设置过去触发警报的时间,仅使用 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 很高兴有帮助... ;-)
  • 2021 ALarmManager 不再适用于 Xamarin,无论您做什么!
  • @user1034912 Android 的 AlarmManager 仍然可以通过 Xamarin 工作,您应该使用您的代码和您遇到的问题发布一个新问题。
猜你喜欢
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多