gpt4 book ai didi

android - AlarmManager 在错误的时间触发警报

转载 作者:IT老高 更新时间:2023-10-28 23:29:17 25 4
gpt4 key购买 nike

我设法创建了一个通知服务,用于在警报时触发通知。不幸的是,使用 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);

我想提供每天都有一个闹钟,但在不同的时间,可以由用户设置。所以我最多使用 7 个警报,它们应该每周触发一次。

即使阅读了许多类似问题的答案(我不打算创建重复的问题),我也没有设法找到问题。

最佳答案

对于低于 19 的 api 级别,您应该使用 AlarmManager.setRepeating() 并且您的警报将在指定时间准确触发。你在 api 级别 19 及以上将不再工作。 android 发生了变化,因此所有重复的警报都是不准确的。因此,如果您想实现精确的重复警报,您应该使用 AlarmManager.setExact() 安排警报,然后在警报触发时在下周再次执行此操作,以此类推。

关于android - AlarmManager 在错误的时间触发警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21461191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com