【问题标题】:Setting Alarm to repeat weekdays at different times设置闹钟在不同时间重复工作日
【发布时间】:2016-06-18 14:14:46
【问题描述】:

所以我正在为 android 创建一个闹钟应用程序,但我在设置闹钟时遇到了一些问题。如果今天是星期六,我将闹钟设置为今天和明天的 17:15,它应该响两次,但它根本不响。此外,如果未选择任何日期,则闹钟应在下次时钟匹配时响起,然后关闭。我在这里搜索了这个问题并找到了很多解决方案,但似乎没有一个对我有用。这是 AlarmReceiver 的代码。

 public void setAlarmSpecificDay(int dayOfWeek, AlarmManager am, PendingIntent pi, Date time) {
    Calendar cal1 = Calendar.getInstance();
    int today = cal1.get(Calendar.DAY_OF_WEEK);
    int numberOfDaysToAdd = dayOfWeek - today;
    if (dayOfWeek < today) {
        // Desired day is earlier in the week than today, add 7 days to
        //  ensure it is in the future
        numberOfDaysToAdd += 7;
    }
    cal1.setTime(time);
    cal1.set(Calendar.DAY_OF_WEEK, numberOfDaysToAdd);

    Long alarmTime = cal1.getTimeInMillis();
    am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime,( 7 * 24 * 60 * 60 * 1000), pi);
    Log.d("Alarm Service", "Alarm set for day " + dayOfWeek + " at ms: " + alarmTime +" " + cal1 );
}

如果我使用此代码并将闹钟设置为在周五、周六和周日响起,最后的日志会显示:

然后大约 1 分钟后闹钟响起。这一定与我从日历中获取时间的方式有关,但我就是想不通。一直在这和谷歌搜索几个小时。

 Alarm set for day 5 at ms: 1466789400000
Alarm set for day 6 at ms: 1466875800000
Alarm set for day 7 at ms: 1466357400000

这是当我将时钟设置为 19:30 FSS 时警报应该触发的 MS,现在时钟是 19:38,如果我在网站上将 MS 转换为日期,则数字是正确的!

1466789400000 = Fri Jun 24 2016 19:30:00 GMT+0200
1466875800000 = Sat Jun 25 2016 19:30:00 GMT+0200
1466357400000 = Sun Jun 19 2016 19:30:00 GMT+0200

【问题讨论】:

    标签: java android calendar alarmmanager


    【解决方案1】:

    您的代码中有两个问题:

    1. 挂起的 Intent 被覆盖。因此只设置了一个警报,因为您正在通过 (FLAG_UPDATE_CURRENT) 更新当前设置的待处理意图。
    2. 在警报管理器中设置了错误的时间。如果您检查第 7 天警报的时间戳,您会发现它已成为过去。因此立即触发警报。

    解决方案:

    1. 使用唯一的请求代码来创建不同的待处理意图。

      PendingIntent getBroadcast(上下文上下文, int requestCode, // 使用这个,设置一些唯一值 意图意图, 整数标志)

    2. 如果所需的日期比今天早,请在 DAY_OF_YEAR 而非星期几的基础上增加 7 天。

      cal1.add(Calendar.DAY_OF_YEAR, numberOfDaysToAdd);

    【讨论】:

    • 1.我每次都尝试设置一个 uniqe 标志,但这似乎没有任何区别。 2. 星期几似乎工作正常。如果我将 F、S、S 设置为天,然后比较 MS 值,它们的日期和时间是正确的,但不会触发警报。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多