Android 重复闹钟在接下来的几天内不起作用
Android repeating alarm not working for next days
我正在尝试每天在某些时段发送通知。它在我创建警报的那一天工作。但是接下来的几天我没有收到任何通知,我的 ReminderClass 也没有触发。我到处用谷歌搜索,但无法解决问题。
我尝试使用 setInexactRepeating
而不是 setRepeating
但我仍然面临这个问题。
这是我的代码:
public void setRecurringAlarmsForPeriod(Integer sh, Integer sm, Integer eh, Integer em, Integer interval)
{
this.interval = interval;
startHour = sh;
startMinute = sm;
endHour = eh;
endMinute = em;
reminderCount = 0;
Integer currentStartHour = startHour;
Integer currentStartMinute = startMinute;
while (currentStartHour < endHour || (currentStartHour.equals(endHour) && currentStartMinute <= endMinute))
{
setRecurringAlarm(currentStartHour, currentStartMinute, reminderCount);
reminderCount++;
currentStartMinute += interval;
if (currentStartMinute >= 60)
{
currentStartMinute -= 60;
currentStartHour++;
}
}
savePersistent();
}
在下面的代码中,我在一天中的某些时段通过 alarmmanager 创建警报
private void setRecurringAlarm(Integer hour, Integer minute, Integer index)
{
Calendar notificationTime = Calendar.getInstance();
notificationTime.set(Calendar.HOUR_OF_DAY, hour);
notificationTime.set(Calendar.MINUTE, minute);
notificationTime.set(Calendar.SECOND, 0);
notificationTime.set(Calendar.MILLISECOND, 0);
Intent intent = new Intent(MainActivity.activity.getApplicationContext(), WaterReminderReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.activity.getApplicationContext(), index, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) MainActivity.activity.getSystemService(Context.ALARM_SERVICE);
if (alarmManager != null)
{
try {
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, notificationTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}
catch (Exception e)
{
Crashlytics.log(Log.ASSERT, "exceptipon :" , e.toString());
}
Crashlytics.log(Log.ASSERT, "Alarm Set For", hour + " " + minute);
Crashlytics.log(Log.ASSERT, "Alarm Date", notificationTime.getTime().toString());
}
else
{
Crashlytics.log(Log.ASSERT, "ALARMS", "WAS NULL");
}
}
我更改了这段代码
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.activity.getApplicationContext(), index, intent, PendingIntent.FLAG_ONE_SHOT);
然后它起作用了。
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.activity.getApplicationContext(), index, intent, 0);
我正在尝试每天在某些时段发送通知。它在我创建警报的那一天工作。但是接下来的几天我没有收到任何通知,我的 ReminderClass 也没有触发。我到处用谷歌搜索,但无法解决问题。
我尝试使用 setInexactRepeating
而不是 setRepeating
但我仍然面临这个问题。
这是我的代码:
public void setRecurringAlarmsForPeriod(Integer sh, Integer sm, Integer eh, Integer em, Integer interval)
{
this.interval = interval;
startHour = sh;
startMinute = sm;
endHour = eh;
endMinute = em;
reminderCount = 0;
Integer currentStartHour = startHour;
Integer currentStartMinute = startMinute;
while (currentStartHour < endHour || (currentStartHour.equals(endHour) && currentStartMinute <= endMinute))
{
setRecurringAlarm(currentStartHour, currentStartMinute, reminderCount);
reminderCount++;
currentStartMinute += interval;
if (currentStartMinute >= 60)
{
currentStartMinute -= 60;
currentStartHour++;
}
}
savePersistent();
}
在下面的代码中,我在一天中的某些时段通过 alarmmanager 创建警报
private void setRecurringAlarm(Integer hour, Integer minute, Integer index)
{
Calendar notificationTime = Calendar.getInstance();
notificationTime.set(Calendar.HOUR_OF_DAY, hour);
notificationTime.set(Calendar.MINUTE, minute);
notificationTime.set(Calendar.SECOND, 0);
notificationTime.set(Calendar.MILLISECOND, 0);
Intent intent = new Intent(MainActivity.activity.getApplicationContext(), WaterReminderReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.activity.getApplicationContext(), index, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) MainActivity.activity.getSystemService(Context.ALARM_SERVICE);
if (alarmManager != null)
{
try {
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, notificationTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}
catch (Exception e)
{
Crashlytics.log(Log.ASSERT, "exceptipon :" , e.toString());
}
Crashlytics.log(Log.ASSERT, "Alarm Set For", hour + " " + minute);
Crashlytics.log(Log.ASSERT, "Alarm Date", notificationTime.getTime().toString());
}
else
{
Crashlytics.log(Log.ASSERT, "ALARMS", "WAS NULL");
}
}
我更改了这段代码
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.activity.getApplicationContext(), index, intent, PendingIntent.FLAG_ONE_SHOT);
然后它起作用了。
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.activity.getApplicationContext(), index, intent, 0);