2016-12-09 4 views
3

У меня есть AlarmManager в моем приложении для Android Xamarin. Я настраиваю его, используя SetExact() со временем 5 минут. Но он запускается только через пять секунд. И независимо от того, в какое время я его настраиваю, он будет всегда срабатывать через 5 секунд. Я использовал тот же самый код на Java, и он отлично работал.Xamarin Android Alarm Manager Issue

Код:

[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

@RaymonddelaCroix вы идете – Alex

ответ

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; 
+0

Да, это была проблема. Большое спасибо! – Alex

+0

@Alex Рад, что это поможет ... ;-) – SushiHangover