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

AlarmManager在错误的时间触发警报

巫马俊力
2023-03-14

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

Log.d(TAG, "next alarm " + df.format(cal.getTime()));

真的没有办法列出所有设置的警报--至少是来自我自己应用程序的警报?我相信这是追踪错误的唯一方法。

cal.setTimeInMillis(System.currentTimeMillis());
cal.add(Calendar.DATE, 1);
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
Log.d(TAG, "next alarm " + df.format(cal.getTime()));
Intent showNotificationIntent = new Intent(context, NotificationService.class);
dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
alarmIntent = PendingIntent.getService(context, dayOfWeek, showNotificationIntent, 0);
getAlarmManager(context).setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
    INTERVAL_WEEK, alarmIntent);

即使看了无数类似问题的答案(我不打算制造一个重复的问题),我也没有设法找到问题所在。

共有1个答案

韦原
2023-03-14

对于低于19的api级别,您应该使用AlarmManager.setRepeating(),您的警报将在指定的时间准确触发。如果你的空气污染指数水平为19或以上,这将不再起作用。Android系统发生了变化,所以所有的重复警报都是不准确的。因此,如果您想要实现精确的重复报警,您应该使用AlarmManager.setExact()安排报警,然后在报警触发时,在下周再做一次,每周如此。

 类似资料:
  • 所有的警报器都在一小时后重新启动- 时间线-

  • 我每天上午11点使用显示通知。 当我在应用程序中设置警报时,警报会在短时间后触发。

  • 我正在测试的手机是Android8.0,但这并不重要,因为我的目标是Android5.1。 所以我处理的代码设定了第二天的闹钟,06:00。 AlarmReciever仅启动服务:

  • 我试图在应用程序启动10分钟后生成警报。根据我的要求,无论用户关闭应用程序、关闭并再次打开,或者甚至在重新启动后,此警报都应该工作。下面是我的代码。 主要活动。Java语言 我的服务。java—这是服务类。 警报eciever.java 如果我没有关掉手机或重新启动手机,我就可以准时收到闹钟。我准时收到闹钟。 然而,如果我关闭并打开手机,或者如果我重新启动手机,我会在手机打开/重新启动后立即收到警

  • 我试图在指定时间触发通知和警报。我已经将日志信息放在控制台上,以查看是否设置了正确的时间,并且一切正常。但是,仍然没有触发警报。请帮忙。 创建通知和警报的/Code/ /通知消息类/ 请帮帮我,我做错了什么?

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