2017-01-02 15 views
0

私は以下のリンクhttps://developer.android.com/training/scheduling/alarms.htmlに従っています。alarmManagerを使用してcalendar.getTimeInMillis()を渡して通知を設定すると、意図した時刻に瞬時に通知がトリガーされます

RTCの最初の例は、すべての日に特定の時間のアラームを設定します。同じコードに従った後でも、トリガされると思われる時点でアラームはトリガされません。代わりに、notificationは、時間ピッカーの助けを借りて行われた時間の設定の直後にトリガされます。続いて私もsetInexactRepeatingを試みたが、何のluck.Iがなかった私のコードスニペット、

AlarmManager alarmMgr = (AlarmManager)  getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(this, NotificationReceiver.class); 
PendingIntent intentalarm = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY,4); 
    calendar.set(Calendar.MINUTE, 30); 

    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, intentalarm); 

代わりのsetRepeatingであることも、私は

calendar.getTimeInMillis()を変更し、アラームが丁度後にトリガSystemClock.elapsedRealtime() + 120 * 1000を使用したときのことを追加したいと思いますそれが設定されてから2分。

しかし、calendar.getTimeInMillis()が使用されている場合、意図した作業が行われる代わりに、即時トリガが発生します。

誰でも私が解決策を見つけるのを助けることができるのであれば、本当に非常に役立つでしょう。メモのためだけに、アラームが現在のデバイス時間より前に設定されていればアラームがすぐにトリガされますが、

NotificationReceiver.classは生成され、タイトルに表示されます。しかし、それが現れる時が心配の原因です。

答えて

0

setTimeInMillisとhourofdayとminuteの両方を使用しています。

アラームが4時30分にトリガーされるようにするには、hourofdayとminuteを追加します。

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY,4); 
calendar.set(Calendar.MINUTE, 30);` 
0

私は直面していた問題を特定できました。私は24時間形式のTimePickerを使用していました。しかし、私はSimpleDateFormat "hh:mm"を使用しました。 'h'は、「h-> am/pm(1-12)in Hour」の略です。だから私がAMで設定したアラームが正しくトリガされます。 1-12'h '形式を使用してからPMに時刻を設定すると、アラームはAM時間に設定され、アラーム時刻/アラーム時刻が即座にトリガされたデバイス時間と比較して、その時刻がすでに経過しています。使用する "HH:MM"は、 "H"は "H->時間(0-23)"を表します。これで私の問題は解決しました。

オンラインエポックタイムコンバーターでTimeinMillisをチェックすると、この問題を特定するのに役立ちました。もう一度私を助けてくれてありがとう。

関連する問題