2017-02-02 17 views
1

アラームマネージャを使用して10秒後に通知を発行するにはXamarin Androidを使用していますが、通知を設定した時刻は5秒後に発生します。私は1970年後からのミリ秒を設定しなければならなかったことを理解、そこから他の記事を読んで試してみたが、AlarmManagerはすぐに5秒後に起動します

試み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); 

試み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); 

答えて

1

動作しませんでしたAndroidでのエポック(1970年1月1日)からのミリ秒の標準的な取得方法は、System.currentTimeMillis()メソッドを使用することです。したがって、あなたは可能性が高いのSystem.currentTimeMillis(する)(alarmManager.setのための二番目のパラメータを設定してみたいと思う)+ 10000

C#の同等のエポックに

DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
を表すDateTimeオブジェクトを作成することです

そしてDateTime.UtcNowオブジェクトからそれを引くが、時間をミリ秒単位で取得するには、その最後に

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

からTimeSpanオブジェクトを取得するには、長い間にタイムスパンのTotalMillisecondsプロパティをキャスト。

long milliSinceEpoch = (long) tsEpoch.TotalMilliseconds; 

これで、その値に10000を追加するだけで、探している結果が得られます。

+1

私は –

+1

を推測するのに役立ちます –

1

また、これは私はまだ特定の時刻と日付のリマインダーを設定する方法を疑問に思うの素晴らしい方法これはC#の同等と本当に便利です

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); 
関連する問題