BroadcastReceiver
は、起動や時刻変更などのイベントでアラームを再スケジュールします。しかし、時間がアラームのトリガ時間を過ぎている場合(たとえば、ユーザが設定から手動で時間を変更した場合)、AlarmManager
は、アラームを再スケジュールするために1日追加できる直前にアラームを発生させます。どうすればこれを避けることができますか?AlarmManagerは、BroadcastReceiverがアラームを再スケジュールする直前にアラームを発生させます。
私は現在、Calendar
の設定と追加の方法を使用してアラームをスケジュールしています。
for (int dayOfWeek = Calendar.SUNDAY; dayOfWeek <= Calendar.SATURDAY; dayOfWeek++) {
if (alarm.getRepeatingDay(dayOfWeek - 1) && dayOfWeek >= nowDay &&
!(dayOfWeek == nowDay && alarm.timeHour < nowHour) &&
!(dayOfWeek == nowDay && alarm.timeHour == nowHour && alarm.timeMinute <= nowMinute)) {
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
alarmSet = true;
break;
}
}
if (!alarmSet) {
for (int dayOfWeek = Calendar.SUNDAY; dayOfWeek <= Calendar.SATURDAY; dayOfWeek++) {
if (alarm.getRepeatingDay(dayOfWeek - 1) && dayOfWeek <= nowDay) {
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
calendar.add(Calendar.WEEK_OF_YEAR, 1);
break;
}
}
}
またドキュメントに記載されている:
述べたトリガー時間が過去になっている場合、アラームはすぐに をトリガされます。
どのようにこの動作を変更できますか?
私はあなたが述べた問題を取り除くことができますよう、jobschedulerのを使用するためにあなたをお勧めします。 – UMESH0492