当前位置: 首页 > 知识库问答 >
问题:

AlarmManager在设置报警后立即触发报警

通安宁
2023-03-14

我每天上午11点使用警报管理器显示通知。

mAlarmManager = (AlarmManager) appContext.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(appContext, AlarmReciever.class);
// Create a PendingIntent to be triggered when the alarm goes off
pIntent = PendingIntent.getBroadcast(appContext, AlarmReciever.REQUEST_CODE,
                    intent, PendingIntent.FLAG_CANCEL_CURRENT);
// Set the alarm to start at approximately 11:00 a.m.
Calendar alarmCal = Calendar.getInstance();
alarmCal.setTimeInMillis(System.currentTimeMillis());
alarmCal.set(Calendar.HOUR_OF_DAY, 11);
// With setInexactRepeating(), you have to use one of the AlarmManager interval
// constants--in this case, AlarmManager.INTERVAL_DAY.
Log.d("TIME IN MILLI", String.valueOf(alarmCal.getTimeInMillis()));
mAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, alarmCal.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pIntent);
setBootRecieverEnabled(); 

当我在应用程序中设置警报时,警报会在短时间后触发。

共有1个答案

华峰
2023-03-14

我在这里找到了解决方案。

如果设置的时间已过,我们需要增加报警日期。

mAlarmManager = (AlarmManager) appContext.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(appContext, AlarmReciever.class);
// Create a PendingIntent to be triggered when the alarm goes off
pIntent = PendingIntent.getBroadcast(appContext, AlarmReciever.REQUEST_CODE,
                    intent, PendingIntent.FLAG_CANCEL_CURRENT);
// Set the alarm to start at approximately 11:00 a.m.
Calendar alarmCal = Calendar.getInstance();
alarmCal.setTimeInMillis(System.currentTimeMillis());
alarmCal.set(Calendar.HOUR_OF_DAY, 11);
if(now.after(alarmCal)){
    alarmCal.add(Calendar.DATE, 1);
}
// With setInexactRepeating(), you have to use one of the AlarmManager interval
// constants--in this case, AlarmManager.INTERVAL_DAY.
Log.d("TIME IN MILLI", String.valueOf(alarmCal.getTimeInMillis()));
mAlarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, alarmCal.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pIntent);
setBootRecieverEnabled();

谷歌应该在文档中提到这一点。

 类似资料:
  • 嗨,我目前正在使用警报管理器。我写了下面给出的代码。根据代码,警报管理器应该在10秒后触发,但在我的代码中,警报管理器会立即触发。请帮助。 还有我的警报接收课 我已经在清单中添加了所需的权限。

  • 我管理一切都很好,创建了一个通知服务,用于作为警报的结果触发通知。不幸的是,使用AlarmManager设置警报不能正常工作。它会在几分钟后触发(而不是几小时,这将表示时区问题)。循环周期为1周,所以我使用了常数INTERVAL_DAY,并将其乘以7。为了确保一个PendingIntent不会替换另一个,我将dayOfWeek作为第二个参数传递给PendingIntent.getService()

  • 我遇到了麻烦,而试图设置一个准确的警报,只有时间选择器。我设置了一个带有如下处理程序的时间选择器: 计时器 不幸的是,当这样做时,警报会立即播放。我也试过用am.setalarmclock但是我不知道如何用它来使用RTC时间,你能帮我吗? 我已经读了很多线程,就像我正在尝试设置警报在特定的时间使用警报管理器,但警报立即启动?并从DatePicker和TimePicker中设置AlarmManage

  • 我试过很多次了,但什么也没有。 这是类的代码,它应该设置警报,但在指定的时间和日期没有发生任何事情。

  • 我有一个应用程序,在指定的时间设置警报与TimePicker(24小时模式)。 我注意到,如果时间是23:00,而您将报警设置为01:00,AlarmManager会将其解释为已过日期。目前,我设置的警报如下所示: 正如你所看到的,该应用程序计算时差,如果时差为负值,则设置第二天的警报。这就产生了上面描述的bug。如何修复它? 当做 马库斯

  • 在我的代码中,我创建了一个警报,如下所示: 要取消警报,我执行以下操作: 移除任何具有匹配意图的警报。任何类型的警报,其意图与此警报匹配(由filterEquals(Intent)定义),都将被取消。 我不太确定“匹配意图”的定义是什么。如果我用上面的代码创建多个警报,然后按照显示的方式执行取消,它会取消我创建的所有警报吗?