【问题标题】:Why is the PendingIntent firing?为什么 PendingIntent 会触发?
【发布时间】:2020-04-28 14:40:59
【问题描述】:

我正在尝试在特定日期发送通知。我的方法“setNextNotification”使用AlarmManager 安排下一个通知。

Java Time API 用于检查当前日期。如果它等于星期二,则将一天添加到 ZonedDateTime 并将警报设置为该天。这至少是我想要完成的。

今天是星期二,无论如何都会触发通知。

我错过了什么?

private static void setNextNotification(Context context) {
        LocalDateTime ldt = LocalDateTime.now();
        ZonedDateTime zdt = ldt.atZone(ZoneId.of("Europe/Stockholm"));
        DayOfWeek dayOfWeek = zdt.getDayOfWeek();

        Intent intent = new Intent(context, ReminderReceiver.class);
        PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

        if(dayOfWeek.getValue() == 2){
            zdt.plusDays(1);
            alarmManager.set(AlarmManager.RTC_WAKEUP, zdt.toInstant().toEpochMilli(), alarmIntent);
        }

    }

【问题讨论】:

    标签: java android-studio android-intent alarmmanager java-time


    【解决方案1】:

    ZonedDateTime 是带有时区的日期时间的不可变表示。因此,即使您调用了plusDays(1),ZoneDateTime 对象中的原始时间仍然保持不变。

    plusDays() 返回一个带有修改后值的新 ZonedDateTime 对象。在您的代码中,您没有在任何地方分配。所以你需要更换

    zdt.plusDays(1); 与 zdt = zdt.plusDays(1);

    为了让它按您的预期工作。

    修改代码:

    private static void setNextNotification(Context context) {
            LocalDateTime ldt = LocalDateTime.now();
            ZonedDateTime zdt = ldt.atZone(ZoneId.of("Europe/Stockholm"));
            DayOfWeek dayOfWeek = zdt.getDayOfWeek();
    
            Intent intent = new Intent(context, ReminderReceiver.class);
            PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    
            if(dayOfWeek.getValue() == 2){
                zdt = zdt.plusDays(1);
                alarmManager.set(AlarmManager.RTC_WAKEUP, zdt.toInstant().toEpochMilli(), alarmIntent);
            }
    
    }
    

    【讨论】:

    • 我现在清楚地看到为什么我应该更多地关注“不可变”。这就像一个字符串!太棒了,谢谢!
    • @OlaBandola 很高兴听到它奏效了!如果这个或任何答案已经解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。但是没有义务这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多