私はここにあるすべての同様の質問について読んだことがありますが、回答が見つからないので、前に答えがあったら私は本当に検索しようとしました。Android AlarmManager PendingIntentがalarm.set()の呼び出しの前に起動されます
一定時間後に通知を表示するようにアラームを設定しています。時間ロジックは確固たるものですが、私はログ出力でこれを知ることができますが、これは問題ではありません。
私はそうのような保留中の意図を作成します。
Intent alarmIntent = new Intent(c, AlarmReceiver.class);
alarmIntent.putExtra("title", name);
alarmIntent.putExtra("location", building);
PendingIntent pi = PendingIntent.getBroadcast(c, 0, alarmIntent, 0);
、その後はmillis
ミリ秒後に発射するアラームを設定しました。この例では、私のログステートメントによればmillis
は407603959
です。それは間違いなく1秒後に発射すべきではありません。
alarm.set(AlarmManager.RTC_WAKEUP, millis, pi);
Log.i("Alarm", "Alarm: " + name + " is set for: "
+ untilAlarm.getDays() + " days, " + untilAlarm.getHours() + " hours, "
+ untilAlarm.getMinutes() + " minutes from now. Or, " + millis
+ " milliseconds");
アラームが設定される前に私のPendingIntentが開始されているかのように見えます。私はそうのように作成されてからアラームを遮断しようとした:
Intent alarmIntent = new Intent(c, AlarmReceiver.class);
alarmIntent.putExtra("title", name);
alarmIntent.putExtra("location", building);
PendingIntent pi = PendingIntent.getBroadcast(c, 0, alarmIntent,
PendingIntent.FLAG_ONE_SHOT);
if (!name.equals("test") {
alarm.set(AlarmManager.RTC_WAKEUP, millis, pi);
//Log statement...
}
とtest
のアラームがまだトリガされますが、ログの文がコンソールに出力されていない、alarm.set
が呼ばれることはなかったという意味します。インテントはまだ実行されており、通知はタイトル "test"とともに表示されます。
アラームが発生する前に私のPendingIntentが起動しているのはなぜですか?
407603959(ミリ秒)が過去に_waaaay_ので、アラームはかなり火災すべきです多くの場合即座に設定されます。設定されていないと発砲しているかどうかを判断するのに十分な情報ではありません。 –
ああ、私はそれがCalendar.getInstance().getTimeInMillis()+ミルズする必要がありますね? – Plays2
今後、407603959ミリ秒後に発射したい場合は、 –