2017-02-02 5 views
1

Ich benutze Xamarin Android, um die Benachrichtigung nach 10 Sekunden mit Hilfe des Alarm-Managers zu senden, aber egal wann ich die Benachrichtigung einstelle, wird nach 5 Sekunden ausgelöst. Ich habe versucht, die anderen Beiträge zu lesen, von dem ich verstanden, dass ich Millisekunden eingestellt von nach 1970, aber nichtAlarmManager wird fast sofort nach fünf Sekunden ausgelöst

Versuch 1

Intent alarmIntent = new Intent(Application.Context, typeof(AlarmReceiver)); 
     alarmIntent.PutExtra("message", "This is my test message!"); 
     alarmIntent.PutExtra("title", "This is my test title!"); 

     PendingIntent pendingIntent = PendingIntent.GetBroadcast(Application.Context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent); 
     AlarmManager alarmManager = (AlarmManager)Application.Context.GetSystemService(Context.AlarmService); 
     //alarmManager.Set(AlarmType.Rtc, SystemClock.ElapsedRealtime() + 30 * 1000, pendingIntent); 
     Java.Util.Calendar calendar = Java.Util.Calendar.Instance; 
     calendar.Set(CalendarField.HourOfDay, 21); 
     calendar.Set(CalendarField.Minute, 41); 

     alarmManager.Set(AlarmType.RtcWakeup, Calendar.GetInstance(Java.Util.TimeZone.Default).TimeInMillis+10000, pendingIntent); 

Versuch 2

DateTime dtBasis = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); // Android times are quoted as milliseconds since start of 1970 
     alarmManager.Set(AlarmType.RtcWakeup, (long)DateTime.Now.AddMinutes(1).ToUniversalTime().Subtract(dtBasis).TotalMilliseconds, pendingIntent); 

Antwort

1

Das funktionierte Standardmethode zum Abrufen der Millisekunden seit der Epoche (01.01.1970) in Android ist die Methode System.currentTimeMillis(). Daher würden Sie wahrscheinlich für alarmManager.set versuchen wollen den zweiten Parameter-Einstellung() System.currentTimeMillis() + 10000.

Das C# Äquivalent wäre ein Datetime-Objekt zu erstellen, die die Epoche

DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
zu sein

Und es dann aus dem DateTime.UtcNow Objekt subtrahieren es

TimeSpan tsEpoch = DateTime.UtcNow.Subtract(epoch); 

schließlich ein Timespan-Objekt zu erhalten, die Zeit in Millisekunden abgerufen werden, werfen die TotalMilliseconds Eigenschaft Zeitspanne auf eine lange.

long milliSinceEpoch = (long) tsEpoch.TotalMilliseconds; 

Mit diesem fügen Sie einfach 10000 zu diesem Wert hinzu und das sollte Ihnen das Ergebnis geben, das Sie suchen.

+1

dies mit dem C# -Äquivalent wirklich hilfreich ist, ich denke, –

+1

ich noch fragen, wie die Erinnerung für eine bestimmte Zeit einstellen und Datum –

1

Dies hilft auch in einer großen Weise

Java.Util.Calendar calendar = Java.Util.Calendar.Instance; 
calendar.Set(CalendarField.HourOfDay, 20); 

calendar.Set(CalendarField.Minute, 57); 


alarmManager.Set(AlarmType.RtcWakeup, calendar.TimeInMillis,pendingIntent); 
Verwandte Themen