【问题标题】:android prevent immediate trigger of alarm service if alarm time has passed for the day如果当天的闹钟时间已经过去,android会阻止立即触发闹钟服务
【发布时间】:2016-07-31 20:10:40
【问题描述】:

警报管理器的参考资料说

如果规定的触发时间是过去的,就会触发警报 马上。

我在我的应用程序中遇到了这个问题。这是我的警报管理器代码:

Intent myIntent = new Intent(getActivity(), DinnerAlarmReceiver.class);
                pendingDinnerIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0);

                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
                calendar.set(Calendar.MINUTE, minute);

                alarmManager.set(AlarmManager.RTC_WAKEUP,
                        calendar.getTimeInMillis(), pendingDinnerIntent);

这个问题有解决办法吗?

-----编辑------

我编写了一些代码来估计闹钟的设置时间是否在当前时间之前。这是上面的部分有相应的变化:

Calendar calendar = Calendar.getInstance();
                long currentTime = calendar.getTimeInMillis();
                calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
                calendar.set(Calendar.MINUTE, minute);
                long setTime = calendar.getTimeInMillis();
                Timestamp setTimestamp = new Timestamp(setTime);
                Timestamp currentTimestamp = new Timestamp(currentTime);
                if (setTimestamp.after(currentTimestamp))
                {
                    alarmManager.set(AlarmManager.RTC_WAKEUP,
                            calendar.getTimeInMillis(), pendingDinnerIntent);
                }
                else
                {
                }

如果setTimestampcurrentTimestamp 之前,我应该alarmManager 做什么?

【问题讨论】:

    标签: android alarmmanager android-alarms repeatingalarm


    【解决方案1】:

    您无需创建Timestamps。你可以用你的Calendar来做。

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
    calendar.set(Calendar.MINUTE, minute);
    
    if(calendar.before(Calendar.getInstance())) {
        calendar.add(Calendar.DATE, 1);
    }
    
    alarmManager.set(AlarmManager.RTC_WAKEUP,
        calendar.getTimeInMillis(), pendingDinnerIntent);
    

    我还要提到,从 KitKat 开始,如果您的 targetSdkVersion 为 19 或以上,则 AlarmManager#set() 方法不准确。如果您希望闹钟在准确的时间触发,则需要使用setExact*() 方法。

    【讨论】:

      猜你喜欢
      • 2015-06-10
      相关资源
      最近更新 更多